Kan*_*kan 2 .net xmlserializer
对于某些数据导出,我们正在做的只是使用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;
}
Run Code Online (Sandbox Code Playgroud)
对于类型列表,生成的XML类似于以下段:
<ArrayOfMyObjects>
<MyObject>
//content here
</MyObject>
</ArrayOfMyObjects>
Run Code Online (Sandbox Code Playgroud)
但另一方面的期望(这个文件的接收者是这样的:
<MT_MyObjects>
<MyObject>
//content here
</MyObject>
</MT_MyObjects>
Run Code Online (Sandbox Code Playgroud)
那么如何在序列化时将ArrayOfMyObjects更改为MT_MyObjects?我知道也可以使用一些Regx替换来完成.但我希望以后不要触摸输出.
更新:解决方案:
我最终可以像这样解决问题:
[Serializable]
[XmlRoot("MT_LoadProfile")]
public class LoadProfArray : List<LoadProfile>
{
//....
}
Run Code Online (Sandbox Code Playgroud)
对于序列化数组,您可以定义控制对象序列化方式的属性.但是,如果对象是列表,则需要创建一个类并从中继承,然后定义属性:
[XmlRoot("DocumentTypes")]
public class DocumentTypeEntityCollection
{
[XmlElement("Type")]
public List<DocumentTypeEntity> Items { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这将创建此输出:
<?xml version="1.0" encoding="utf-8" ?>
<DocumentTypes>
<Type>
<TypeID>7</TypeID>
....
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5979 次 |
| 最近记录: |