Внутри этих классов есть некоторые свойства, имена которых должны динамически меняться при сериализации в XML в зависимости от типа, указанного внутри атрибута.
Код: Выделить всё
// inside a broader class
[System.Xml.Serialization.XmlElementAttribute("ReportRequest", typeof(ReportRequestType), Form = System.Xml.Schema.XmlSchemaForm.Unqualified, ElementName = "ReportRequest")] [System.Xml.Serialization.XmlElementAttribute("StatusRequest", typeof(StatusRequestType), Form = System.Xml.Schema.XmlSchemaForm.Unqualified, ElementName = "StatusRequest")]
[System.Xml.Serialization.XmlElementAttribute("TransmitRequest", typeof(TransmitRequestType), Form = System.Xml.Schema.XmlSchemaForm.Unqualified, ElementName = "TransmitRequest")]
public object Item
{
get
{
return this.itemField;
}
set
{
this.itemField = value;
}
}
Я пытался использовать пользовательский JsonConverter, примененный к Item, но в этом случае я, похоже, не могу получить доступ к атрибутам, чтобы определить имя, которое будет использоваться в зависимости от типа Item.
Я попробовал ContractResolver, но затем я могу получить доступ к атрибутам, но, похоже, я не могу узнать фактический тип, который будет использоваться.
Я, вероятно, что-то упускаю, но не знаю, что и где.
Я ожидаю, что что-то даст мне
От:
Код: Выделить всё
class A
{
public string Value { get; set; }
}
class B
{
public int B1 { get; set; }
public string B2 { get; set; }
}
[attribute..., MyType=typeof(A), MyName="A"]
[attribute..., MyType=typeof(B), MyName="B"]
public object Item { get; set; }
Код: Выделить всё
{
...
"A": {... content of class A},
...
}
Код: Выделить всё
{
...
"B": {... content of class A},
...
}
- Не верьте самим классам, типам и атрибутам... они являются всего лишь примерами для описания проблемы.
- Мои настоящие типы имеют множество других свойств, к которым применяются атрибуты сериализации Json.NET, контролирующие их имена, игнорируются ли они и т. д. Распознаватель контрактов Json.NET по умолчанию учитывает это, поэтому мне бы хотелось избежать необходимости переделывать всю эту работу с нуля.
Подробнее здесь: https://stackoverflow.com/questions/799 ... name-based
Мобильная версия