将对象集合(其中包含集合对象)导出到xml

时间:2011-03-27 17:35:46

标签: c# xml-serialization

我有一个存储多个属性的数据对象类。一个是文件夹,另一个是该数组中所有文件的string[]

我需要做的是将其写入xml,如下所示:

<X>
   <a>dir</a>
      <b>file</f>

因此,所有文件(每个数据对象都有一个string[]数组)嵌套在目录字段下面。

这很容易吗?或者是否有一个外部库可以轻松地为我做到这一点?

由于

2 个答案:

答案 0 :(得分:2)

你的意思是这样的:

var myxml = new XElement(yourObj.FolderName);
myxml.Add(new XElement("Files",yourObj.Files.Select(x => new XElement("File",x)));

答案 1 :(得分:1)

使用Xml Serializer为您完成工作?

using System.Linq;
using System.Collections.Generic;
using System.Xml.Serialization;
using System.IO;
using System;

namespace NS
{
    public class Data
    {
        public class Nested
        {
            public string The     { get; set; }
            public string[] stuff = {"lazy Cow Jumped Over", "The", "Moon"};
        }

        public List<Nested> Items;
    }

    static class Helper
    {
        public static string ToXml<T>(this T obj) where T:class, new()
        {
            if (null==obj) return null;

            using (var mem = new MemoryStream())
            {
                var ser = new XmlSerializer(typeof(T));
                ser.Serialize(mem, obj);
                return System.Text.Encoding.UTF8.GetString(mem.ToArray());
            }
        }

        public static T FromXml<T>(this string xml) where T: new()
        {
            using (var mem = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(xml)))
            {
                var ser = new XmlSerializer(typeof(T));
                return (T) ser.Deserialize(mem);
            }
        }

    }

    class Program
    {
        public static void Main(string[] args)
        {
            var data = new Data { Items = new List<Data.Nested> { new Data.Nested {The="1"} } };
            Console.WriteLine(data.ToXml());

            var clone = data.ToXml().FromXml<Data>();
            Console.WriteLine("Deserialized: {0}", !ReferenceEquals(data, clone));
            Console.WriteLine("Identical: {0}", Equals(data.ToXml(), clone.ToXml()));
        }
    }
}

将输出

<?xml version="1.0" encoding="utf-8"?>
<Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Items>
    <Nested>
      <stuff>
        <string>lazy Cow Jumped Over</string>
        <string>The</string>
        <string>Moon</string>
      </stuff>
      <The>1</The>
    </Nested>
  </Items>
</Data>
Deserialized: True
Identical: True

特别是在使用现有的XSD时,有一些角落和陷阱,但这一切都非常好,并在其他地方记录。