派生对象的XML反序列化。 [英] XML deserialization for derived objects.

查看:94
本文介绍了派生对象的XML反序列化。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何反序列化文档XML:

---------------------------------- -----------

How deserialize document XML:
---------------------------------------------

<something id=""234"">
     <items>
          <item name=""Obj1"">
               <a>1</a>
               <k>1</k>
          </item>
          <item name=""Obj2"">
                <c>5</c>
                <d>2</d>
                <e>1</e>
           </item>
     </items>
</something>



我无法获得物品价值元素

---------------------------------------------


I can't get value elemnts in item
---------------------------------------------

[XmlRoot("something")]
    public class Something: ClassBase
    {
       [XmlAttribute("id")]
        public string id;

       [XmlArray("items")]
       public ItemsCollection forms { set; get; } 

       public Something(): base() { }
    }


    [XmlType("item")]
    public class ItemsCollection: CollectionClassBase<Item>
    {
        public ItemsCollection() : base() { }
    }


    [XmlType("item")]
    public class Item: ClassBase
    {
        [XmlAttribute("name"), DefaultValue("")]
        public string name { set; get; }
    }

    [XmlType("item")]
    public class ItemObj1 : Item
    {
        [XmlElement("a"), DefaultValue("")]
        public string a  { set; get; }
        [XmlElement("b"), DefaultValue("")]
        public string b { set; get; }
    }

推荐答案

我建​​议使用xsd.exe工具 [ ^ ]可以从xml生成正确的类定义。



请按照以下步骤操作:使用xsd.exe自动生成实体类,用于XML序列化和反序列化 [ ^ ]





我建议改变你的XML结构:

I'd suggest to use xsd.exe tool[^] which can generate proper class(es) definition from xml.

Follow these steps: Auto generating Entity classes with xsd.exe for XML Serialization and De-Serialization[^]


I'd suggest to change your XML structure:
<something id="234">
     <items>
          <item name="Obj1">
               <a>1</a>
               <k>1</k>



to:


to:

<something id="234">
     <items>
          <item name="Obj1">
               <property name="a">1</a>
               <property name="k">1</k>





它应该在XML规范化时帮助你。

[/ EDIT]



It should help you while XML normalization.
[/EDIT]


这篇关于派生对象的XML反序列化。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆