【问题标题】:XML deserialization with an optional list带有可选列表的 XML 反序列化
【发布时间】:2012-12-04 17:26:49
【问题描述】:

我正在尝试找出如何处理 XML 的反序列化。我确实了解如何使用内置的序列化并且之前已经这样做过。

这次我的问题是 XML 中的一个部分可能是消息列表或单个消息。

编辑:下面的 XML 片段是来自格式良好的 XML 文档的 sn-ps。收到时,XML 将包含消息列表或单个消息。为了清晰和简洁,包含的 XML 被省略了。

XML 片段看起来像这样......

<messageList>
    <message>message1</message>
    <message>message2</message>
</messageList>

或者像这样……

<message>singleMessage</message>

是否可以使用内置的 .Net 反序列化来处理这个问题,还是我需要手动编写代码?

【问题讨论】:

  • 在schema中,以上两种情况是完全独立的实体,因为它们代表不同的schema。这能满足你的需要吗?
  • 为什么两种情况下都没有根节点?
  • 列出的 XML 是片段,它们将包含在一个更大的、格式良好的 XML 文档中。在任何一种情况下,都会收到包含“”或“”节点的 XML 文档。

标签: c# .net xml xml-serialization


【解决方案1】:

试试这个

[XmlRoot("MessageRoot", Namespace = "", IsNullable = false)]
public class MessageRoot
{

    [XmlElement(IsNullable = true, ElementName = "message")]
    public string Message { get; set; }

    [XmlArray("messageList")]
    [XmlArrayItem("message")]
    public string[] Messages { get; set; }
}



   <MessageRoot>   
     <message> message </message>  
     <messageList>
       <message>message1</message>
       <message>message2</message>   
      </messageList>  
   </MessageRoot> 

【讨论】:

    猜你喜欢
    • 2016-07-25
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多