Есть ли способ, чтобы пользовательские атрибуты не игнорировались в docbook при конвертации из asciidoc?

Ваша проблема в том, что при десериализации коллекции, которая не доступна только для чтения, Json.NET проверяет, была ли коллекция уже выделена, например, в конструкторе содержащего типа. Если это так, он заполняет уже существующую коллекцию для десериализованного содержимого JSON и никогда не устанавливает коллекцию обратно. К сожалению, ваше свойство возвращает временную коллекцию прокси, поэтому ваш контейнерный класс SpecialObject никогда не получает десериализованные результаты.

Самый простой способ предотвратить это - указать, что Json.NET должен всегда выделять новую коллекцию и установите его обратно, а не повторно используйте ранее существовавшую коллекцию, используя настройку JsonPropertyAttribute ObjectCreationHandling = ObjectCreationHandling.Replace

[JsonProperty(ObjectCreationHandling = ObjectCreationHandling.Replace)]
public List SpecialObjectIDs { get { return SpecialObjectCollection.Select(x => x.ID).ToList(); } set { tempObjectIDs = value; } }

Альтернативно вы можете использовать string [], а не List для вашего свойства для сбора прокси:

public string [] SpecialObjectIDs { get { return SpecialObjectCollection.Select(x => x.ID).ToArray(); } set { tempObjectIDs = value == null ? null : value.ToList(); } }

Поскольку массивы не могут быть изменены, Json.NET всегда будет выделять новый массив при десериализации и установить его после завершения.

0
задан Tim 21 January 2019 в 08:49
поделиться