【问题标题】:How to deserialize list to take element value如何反序列化列表以获取元素值
【发布时间】:2019-05-20 14:47:07
【问题描述】:

我尝试使用这样的 XML 测试对我的 Web API 的 1 个 HTTP POST XML 请求:

<trx>
            <header>...</header>
            <body>
        <unity keycnt="4">
            <key param="param1"><![CDATA[value1]]</key>
            <key param="param2"><![CDATA[value2]]</key>
            <key param="param3"><![CDATA[value3]]</key>
            <key param="param4"><![CDATA[value4]]</key>
            </unity>
        </body>
        </trx>

当我使用这样的类列表反序列化该请求时:

 [Serializable()]
    [XmlRoot(ElementName="trx")]
    public class Trx {
        [XmlElement("header")]
        public Header Header { get; set;}
         [XmlElement("body")]
        public Body Body{ get; set;}
    }

类主体:

 [Serializable()]
    public class Body{
        [XmlElement("unity")]
        public Unity Unity{ get; set;}
    }

统一类:

  [Serializable()]
        public class Unity{
            [XmlAttribute("keycnt")]
            public string keycnt{ get; set;}
       [XmlElement("key")]
            public List<Key> KeyList{ get; set;}
        }

类键:

  [Serializable()]
            public class Key{
                [XmlAttribute("param")]
                public string param{ get; set;}
            }

反序列化后,我得到除了键列表项的值之外的所有属性。(value1, value2, value3, value4)

【问题讨论】:

标签: c# .net xml list serialization


【解决方案1】:

您需要使用string 数据类型向您的Key 类添加一个属性,然后您的XmlSerializer 将为您提供反序列化CDATA 中的值。

并用[XmlText] 装饰此属性。此属性可以为您提供 CDATA 作为 xml 中特定节点中的文本。

所以你的Key 课程应该是。

[Serializable()]
public class Key
{
    [XmlAttribute("param")]
    public string param { get; set; }
    [XmlText]
    public string Text { get; set; }
}

【讨论】:

    【解决方案2】:

    检查您输入的 XML。您的 XML 格式不正确。这里更正一个。最后缺少 CDATA 元素。

    <trx>
    <header></header>
    <body>
        <unity keycnt="4">
            <key param="param1"><![CDATA[value1]]></key>
            <key param="param2"><![CDATA[value2]]></key>
            <key param="param3"><![CDATA[value3]]></key>
            <key param="param4"><![CDATA[value4]]></key>
        </unity>
    </body>
    

    【讨论】:

    • 抱歉,打错了:D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多