当前位置:  开发笔记 > 编程语言 > 正文

将类列表序列化为XML

如何解决《将类列表序列化为XML》经验,为你挑选了1个好方法。

我有一组类,我想序列化为XML文件.它看起来像这样:

public class Foo
{
  public List BarList { get; set; }
}

bar只是一组属性的包装器,如下所示:

public class Bar
{
  public string Property1 { get; set; }
  public string Property2 { get; set; }
}

我想对此进行标记,以便将其输出到XML文件 - 这将用于持久性,并且还可以通过XSLT将设置呈现为一个很好的人类可读形式.

我想得到一个像这样的好的XML表示:



  
    
      Value
      Value   
    
    
      Value
      Value   
    
  

Barlist中的所有条形图都写在哪里,包含所有属性.我很确定我需要在类定义上使用一些标记才能使它工作,但我似乎找不到合适的组合.

我用属性标记了Foo

[XmlRoot("Foo")]  

list属性

[XmlArray("BarList"), XmlArrayItem(typeof(Bar), ElementName="Bar")]

试图告诉Serializer我想要发生什么.这似乎不起作用,我只是得到一个空标记,看起来像这样:


 
  

我不确定我使用自动属性的事实是否会产生任何影响,或者如果使用泛型需要任何特殊处理.我已经使用了更简单的类型,比如字符串列表,但到目前为止,我已经找到了一个类列表.



1> Carl..:

要检查一下,您是否将Bar标记为[Serializable]?

此外,您需要Bar上的无参数ctor来反序列化

嗯,我用过:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {

        Foo f = new Foo();

        f.BarList = new List();

        f.BarList.Add(new Bar { Property1 = "abc", Property2 = "def" });

        XmlSerializer ser = new XmlSerializer(typeof(Foo));

        using (FileStream fs = new FileStream(@"c:\sertest.xml", FileMode.Create))
        {
            ser.Serialize(fs, f);
        }
    }
}

public class Foo
{
    [XmlArray("BarList"), XmlArrayItem(typeof(Bar), ElementName = "Bar")]
    public List BarList { get; set; }
}

[XmlRoot("Foo")]
public class Bar
{
    public string Property1 { get; set; }
    public string Property2 { get; set; }
}

这产生了:



  
    
      abc
      def
    
  


XML Serializer不使用`[Serializable]`.
推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有