这个问题是关于重新分解XMl模型,该模型适用于我收到的XML但不能改变 - 虽然名称已经改变。
我有以下课程:
[XmlType(AnonymousType = true)]
[XmlRoot(ElementName = "loadsOfMainType", Namespace = "", IsNullable = false)]
class MainType
{
[XmlElement("mainType")]
public MyNameForMainType[] MainTypes { get; set; }
}
[XmlRoot(ElementName = "aMainType", Namespace = "", IsNullable = false)]
[XmlType(AnonymousType = true)]
public class MyNameForMainType
{
[XmlElement("single")]
public Single Single { get; set; }
[XmlElement("dual")]
public Dual Dual { get; set; }
}
[XmlType(AnonymousType = true)]
public class Single
{
[XmlElement("thing1")]
public Thing1 MyNameForThing1 { get; set; }
[XmlElement("thing2")]
public Thing2 MyNameForThing2 { get; set; }
[XmlElement("thing3")]
public Thing3 MyNameForThing3 { get; set; }
[XmlElement("somthingElseInSingle")]
public StuffInSingleOnly StuffInSingle { get; set; }
}
[XmlType(AnonymousType = true)]
public class Dual
{
[XmlElement("thing1")]
public Thing1 MyNameForThing1 { get; set; }
[XmlElement("thing2")]
public Thing2 MyNameForThing2 { get; set; }
[XmlElement("thing3")]
public Thing3 MyNameForThing3 { get; set; }
[XmlElement("someStuffInDual")]
public StuffInDualOnly StuffInDual { get; set; }
}
正如你所看到的,Thing1,Thing2,Thing3都是转移到另一个班级的候选人。还有其他类可以从相同的因子中受益。
我想为那些" Thing" s创建一个类,并让XMLSerializer将我的MainType与Single或Dual下的新类型一起使用 - 让我们称之为CommonThing,例如,单身会成为:
[XmlType(AnonymousType = true)]
public class Single
{
public CommonThing CommonThing { get; set; }
[XmlElement("somthingElseInSingle")]
public StuffInSingleOnly StuffInSingle { get; set; }
}
我已经在CommonThing上尝试过各种各样的XML序列化装饰,包括Single和CommonThing,而且对于我来说,我能得到的最好的是CommonThing返回null。
是否可以在Single和CommonThing中的任何一个或两个中添加一些属性组合(或者甚至是MainType)?
请注意,我只是将MainType作为我的T传递给ReadAsAsync,因为我还有其他想要使用CommonThing的T(虽然我想我可以传递另一种类型,因为我写了那个位而且我认为如果没有CommonThing,T会被忽略 - 但我认为我真的不应该这样做。