加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 使用数组名称包装序列化数组元素

发布时间:2020-12-16 01:31:35 所属栏目:百科 来源:网络整理
导读:我使用的是VSTS2008 C#.Net 3.0.我使用下面的代码来序列化 XML,我的对象包含数组类型属性,我想在下面的预期结果中添加一个额外的元素’layer(“MyInnerObjectProperties”元素层),我想将“MyInnerObjectProperties”元素作为父元素所有MyInnerObjectProperty
我使用的是VSTS2008 C#.Net 3.0.我使用下面的代码来序列化 XML,我的对象包含数组类型属性,我想在下面的预期结果中添加一个额外的元素’layer(“MyInnerObjectProperties”元素层),我想将“MyInnerObjectProperties”元素作为父元素所有MyInnerObjectProperty元素的元素).有任何想法吗?

当前的序列化XML,

<?xml version="1.0"?>
<MyClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <MyObjectProperty>
    <MyInnerObjectProperty>
      <ObjectName>Foo Type</ObjectName>
    </MyInnerObjectProperty>
    <MyInnerObjectProperty>
      <ObjectName>Goo Type</ObjectName>
    </MyInnerObjectProperty>
  </MyObjectProperty>
</MyClass>

预期的序列化XML,

<?xml version="1.0"?>
<MyClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <MyObjectProperty>
    <MyInnerObjectProperties>
      <MyInnerObjectProperty>
        <ObjectName>Foo Type</ObjectName>
      </MyInnerObjectProperty>
      <MyInnerObjectProperty>
        <ObjectName>Goo Type</ObjectName>
      </MyInnerObjectProperty>
    </MyInnerObjectProperties>
  </MyObjectProperty>
</MyClass>

目前的代码,

public class MyClass
{
    private MyObject[] _myObjectProperty;

    [XmlElement(IsNullable=false)]
    public MyObject[] MyObjectProperty
    {
        get
        {
            return _myObjectProperty;
        }
        set
        {
            _myObjectProperty = value;
        }
    }
}
public class MyObject
{
    private MyInnerObject[] _myInnerObjectProperty;

    [XmlElement(IsNullable = false)]
    public MyInnerObject[] MyInnerObjectProperty
    {
        get
        {
            return _myInnerObjectProperty;
        }
        set
        {
            _myInnerObjectProperty = value;
        }
    }
}

public class MyInnerObject
{
    public string ObjectName;
}

public class Program
{
    static void Main(string[] args)
    {
        XmlSerializer s = new XmlSerializer(typeof(MyClass));
        FileStream fs = new FileStream("foo.xml",FileMode.Create);
        MyClass instance = new MyClass();
        instance.MyObjectProperty = new MyObject[1];
        instance.MyObjectProperty[0] = new MyObject();
        instance.MyObjectProperty[0].MyInnerObjectProperty = new MyInnerObject[2];
        instance.MyObjectProperty[0].MyInnerObjectProperty[0] = new MyInnerObject();
        instance.MyObjectProperty[0].MyInnerObjectProperty[0].ObjectName = "Foo Type";
        instance.MyObjectProperty[0].MyInnerObjectProperty[1] = new MyInnerObject();
        instance.MyObjectProperty[0].MyInnerObjectProperty[1].ObjectName = "Goo Type";

        s.Serialize(fs,instance);

        return;
    }
}

解决方法

利用 XmlArrayItemAttribute

[XmlArray("MyInnerObjectProperties")]     
[XmlArrayItemAttribute("MyInnerObjectProperty",typeof(MyInnerObject),IsNullable = false)]
public MyInnerObject[] MyInnerObjectProperty
{
   get
     {
         return _myInnerObjectProperty;
     }
   set
     {
        _myInnerObjectProperty = value;
     }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读