Я использую JSON.NET для сериализации моих объектов для подключения к REST API. Одно из свойств моего объекта, которое должно быть сериализовано для JSON, имеет динамическое имя свойства.
Если значение, содержащееся в структуре для этого свойства, является числовым значением, то свойство JSON является "type_id", однако, если это значение является строковым значением, тогда имя свойства JSON является "type_code". Я попытался использовать для этого пользовательский JsonConverter
, но я получаю JsonWriterException
с этим сообщением при попытке сериализации:
"Token PropertyName в состоянии Свойство приведет к недопустимому объекту JSON. Path ''."
Ниже находится подмножество моего объекта, как показано ниже. Я не указывал имя свойства в моем объекте для этого как такового:
[JsonProperty("title",Required=Required.Always,Order=1)]
public string Title { get; set; }
[JsonProperty("date",Order=3)]
[JsonConverter(typeof(IsoDateTimeConverter))]
public DateTime Date { get; set; }
[JsonProperty(Order=2)]
[JsonConverter(typeof(TypeIdentifierJsonConverter))]
public TypeIdentifier DocTypeIdentifier { get; set; }
В классе TypeIdentifier у меня есть следующее в моем методе WriteJson():
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
TypeIdentifier docTypeId;
id= (TypeIdentifier) value;
writer.WritePropertyName(id.ParameterName);
writer.WriteValue(id.Value);
}
Однако я предполагаю, что он по умолчанию не совпадает с именем свойства объекта, а не с моим обычным, что приводит к двум именам свойств для одного значения в строке JSON. Как можно присвоить имя свойства динамически для этого, поскольку тег JsonPropertyAttribute появляется, чтобы вытащить имя свойства объекта, если он явно не указан?
ПРИМЕЧАНИЕ. Этот объект никогда не нужно десериализовать из этого приложения.
EDIT: Этот объект помечен атрибутом [JsonObject(MemberSerialization.OptIn)]