我有一个存储多个属性的数据对象类。一个是文件夹,另一个是该数组中所有文件的string[]
。
我需要做的是将其写入xml,如下所示:
<X>
<a>dir</a>
<b>file</f>
因此,所有文件(每个数据对象都有一个string[]
数组)嵌套在目录字段下面。
这很容易吗?或者是否有一个外部库可以轻松地为我做到这一点?
由于
答案 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时,有一些角落和陷阱,但这一切都非常好,并在其他地方记录。