对于某些数据导出,我们正在做的只是使用XmlSerializer序列化.Net对象,如列表或集合。我们使用这样的东西:
public static bool WriteToXMLFile(string fullFileNameWithPath, Object obj, Type ObjectType)
{
TextWriter xr = null;
try
{
XmlSerializer ser = new XmlSerializer(ObjectType);
xr = new StreamWriter(fullFileNameWithPath);
ser.Serialize(xr, obj);
}
catch (Exception ex)
{
throw ex;
}
finally
{
if(xr != null)
xr.Close();
}
return true;
}
对于类型列表,生成的XML类似于以下段:
<ArrayOfMyObjects>
<MyObject>
//content here
</MyObject>
</ArrayOfMyObjects>
但另一方面的期望(这个文件的接收者是这样的:
<MT_MyObjects>
<MyObject>
//content here
</MyObject>
</MT_MyObjects>
那么在序列化时如何将ArrayOfMyObjects更改为MT_MyObjects?我知道也可以使用一些Regx替换来完成。但是我想不要在以后触摸输出。
更新:解决方案:
我最终可以像这样解决问题:
[Serializable]
[XmlRoot("MT_LoadProfile")]
public class LoadProfArray : List<LoadProfile>
{
//....
}
答案 0 :(得分:8)
对于序列化数组,您可以定义控制对象序列化方式的属性。但是,如果对象是列表,则需要创建一个类并从中继承,然后定义属性:
[XmlRoot("DocumentTypes")]
public class DocumentTypeEntityCollection
{
[XmlElement("Type")]
public List<DocumentTypeEntity> Items { get; set; }
}
这将创建此输出:
<?xml version="1.0" encoding="utf-8" ?>
<DocumentTypes>
<Type>
<TypeID>7</TypeID>
....
答案 1 :(得分:3)
在您的班级中,使用
装饰该属性[XmlArray("MT_MyObjects"), XmlArrayItem(typeof(MyObject))]
答案 2 :(得分:2)
请找到以下示例: / 步骤1 / 要将其集合序列化的虚拟类
[Serializable]
public class MyObject
{
public string ChildObject1 { get; set; }
public string ChildObject2 { get; set; }
public MyObject(string childObject1, string childObject2)
{
ChildObject1 = childObject1;
ChildObject2 = childObject2;
}
public MyObject()
{
}
}
/ 步骤2 / 创建一个列表集合并应用XMLRootElement
[XmlRoot("Test")]
public class MyObjectCollection: List<MyObject>
{
}
/ 步骤3 /
使用数据填充MyObject类并序列化
MyObjectCollection lst = new MyObjectCollection();
lst.Add(new MyObject("1", "a"));
lst.Add(new MyObject("2", "b"));
lst.Add(new MyObject("3", "c"));
try
{
XMLFileAgent.WriteToXMLFile(@"C:\TestLog.xml", lst, lst.GetType());
}
catch (Exception ex)
{
throw ex;
}