У меня есть классы, созданные из XSD в C#.
Внутри этих классов есть некоторые свойства, имена которых должны динамически меняться при сериализации в 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, примененный к элементу, но в этом случае, похоже, я не могу получить доступ к атрибутам, чтобы определить имя, которое будет использоваться в зависимости от типа элемента.
Я попробовал 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 B},
...
}
- Не верьте самим классам, типам и атрибутам... они являются всего лишь примерами для описания проблемы.
- Мои настоящие типы имеют множество других свойств, к которым применяются атрибуты сериализации Json.NET, контролирующие их имена, игнорируются ли они и т. д. Распознаватель контрактов Json.NET по умолчанию учитывает это, поэтому мне бы хотелось избежать необходимости переделывать всю эту работу с нуля.
Подробнее здесь: https://stackoverflow.com/questions/799 ... name-based
Мобильная версия