我想将XML文件反序列化为一个类,但是失败。请帮忙!
这样的XML文件:
<messages>
<message name="a">
<field name="ab"/>
<field name="ab1"/>
<field name="ab2"/>
</message>
<message name="b">
<field name="bc"/>
<group name="ab">
<field name="ab"/>
<field name="ab1"/>
<field name="ab2"/>
<group name="ab">
<field name="4"/>
</group>
</group>
<field />
....
</message>
</messages>
这只是一个演示。现实是一个“消息”,包括多个“字段”和“组”,该组包括多个字段和组!!! 这是随机的,不是恒定的。
我已经尝试过了
[XmlInclude(typeof(GroupInMsg))]
[XmlType("field")]
public class FieldBase
{
[XmlAttribute("name")]
public string name { get; set; }
}
[XmlType("message")]
public class Message
{
public Message()
{
}
[XmlAttribute("name")]
public string name { get; set; }
public FieldBase[] Fields { get; set; }
}
public class GroupInMsg : FieldBase
{
public GroupInMsg()
{
}
//[XmlArrayItem(Type = typeof(FieldBase))]
//[XmlArrayItem(Type = typeof(GroupInMsg))]
public FieldBase[] Fields { get; set; }
}
我的最终目标是对 Quickfix 进行反序列化
<messages>
<message name="Heartbeat" msgtype="0" msgcat="admin">
<field name="TestReqID" required="N"/>
</message>
<message name="Logon" msgtype="A" msgcat="admin">
<field name="EncryptMethod" required="Y"/>
<field name="HeartBtInt" required="Y"/>
<field name="RawDataLength" required="N"/>
<field name="RawData" required="N"/>
<field name="ResetSeqNumFlag" required="N"/>
<field name="MaxMessageSize" required="N"/>
<group name="NoMsgTypes" required="N">
<field name="RefMsgType" required="N"/>
<field name="MsgDirection" required="N"/>
</group>
</message>
<message name="TestRequest" msgtype="1" msgcat="admin">
<field name="TestReqID" required="Y"/>
</message>
<message name="ResendRequest" msgtype="2" msgcat="admin">
<field name="BeginSeqNo" required="Y"/>
<field name="EndSeqNo" required="Y"/>
</message>
<message name="Reject" msgtype="3" msgcat="admin">
<field name="RefSeqNum" required="Y"/>
<field name="RefTagID" required="N"/>
<field name="RefMsgType" required="N"/>
<field name="SessionRejectReason" required="N"/>
<field name="Text" required="N"/>
<field name="EncodedTextLen" required="N"/>
<field name="EncodedText" required="N"/>
</message>
<message name="SequenceReset" msgtype="4" msgcat="admin">
<field name="GapFillFlag" required="N"/>
<field name="NewSeqNo" required="Y"/>
</message>
<message name="Logout" msgtype="5" msgcat="admin">
<field name="Text" required="N"/>
<field name="EncodedTextLen" required="N"/>
<field name="EncodedText" required="N"/>
</message>
......
很多messges。很多领域和messge中的组。还有很多group和field中的组!!
原谅我!谢谢!
答案 0 :(得分:0)
@ppz。无论何时要在StackOverflow社区上寻求帮助或解决方案。我的意思是您期望或遇到一些错误,您必须描述一种正确的方法。以便社区尽快了解并提供更好的解决方案。 你可以参考下面的代码 根据您提供给我们的XML数据。 模型
([a-zA-Z0-9.\-_+]+@[a-zA-Z0-9.-]+\.[a-z]{2,10})
^ note backslash here
然后按如下所示反序列化XML
[XmlRoot(ElementName = "field")]
public class Field
{
[XmlAttribute(AttributeName = "name")]
public string Name { get; set; }
}
[XmlRoot(ElementName = "message")]
public class Message
{
[XmlElement(ElementName = "field")]
public List<Field> Field { get; set; }
[XmlAttribute(AttributeName = "name")]
public string Name { get; set; }
[XmlElement(ElementName = "group")]
public Group Group { get; set; }
}
[XmlRoot(ElementName = "group")]
public class Group
{
[XmlElement(ElementName = "field")]
public List<Field> Field { get; set; }
[XmlAttribute(AttributeName = "name")]
public string Name { get; set; }
}
[XmlRoot(ElementName = "messages")]
public class Messages
{
[XmlElement(ElementName = "message")]
public List<Message> Message { get; set; }
}
希望它能对您有所帮助。谢谢..!