У меня есть XML файл, который может содержать различные известные типы объектов. Чтобы упростить поддержку кода, я надеялся использовать для этого дженерики, но, поскольку мне нужно ввести имя элемента XML в атрибут [XmlElement]
, я столкнулся с проблемой, поскольку атрибуты обычно не хорошо играть с дженериками.
Это два XML примера:
<xml xmlns:so="http://some.schema">
<so:myType>
<value>42</value>
<description>foo</description>
</so:myType>
</xml>
<xml xmlns:so="http://some.schema">
<so:myOtherType>
<details>
<code>47</code>
<value>bar</code>
</details>
</so:myOtherType>
</xml>
И их соответствующие классы:
[XmlElement(ElementName = "myType", Namespace = "http://some.schema")]
public class myType {
public int value { get; set; }
public string description { get; set; }
}
[XmlElement(ElementName = "myOtherType", Namespace = "http://some.schema")]
public class myOtherType {
public myOtherTypeDetails details { get; set; }
public class myOtherTypeDetails {
public int code { get; set; }
public string value { get; set; }
}
}
Теперь я надеялся, что смогу создать некоторый обобщенный c класс и использовать с атрибутом [XmlElement]
, вроде как:
public class GenericType<T> {
[XmlElement(ElementName = typeof(T).Name, Namespace = "http://some.schema")]
public T InnerType { get; set; }
}
И использовать его так:
GenericType<myOtherType> = XmlSerializer.Deserialize(xml);
Но это, очевидно, не работать, потому что атрибуты не могут использовать параметры типа, хотя я видел примеры [SomeAttribute(typeof(Foo))]
, который, кажется, противоречит этому.
Есть ли способ достичь такого рода "automati c" XML синтаксический анализ на основе обобщенных c типов?