.NET XmlSerializer:如何替换xml标记的名称?

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)

Ali*_*tad 8

对于序列化数组,您可以定义控制对象序列化方式的属性.但是,如果对象是列表,则需要创建一个类并从中继承,然后定义属性:

[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)