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

.NET XmlSerializer:如何替换xml标记的名称?,.net,xmlserializer,.net,Xmlserializer,对于某些数据导出,我们所做的只是使用XmlSerializer序列化.Net对象,如列表或集合。我们使用这样的方法: public static bool WriteToXMLFile(string fullFileNameWithPath, Object obj, Type ObjectType) { TextWriter xr = null; try { XmlSerial

对于某些数据导出,我们所做的只是使用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;
        }
<MT_MyObjects>
    <MyObject>
    //content here
    </MyObject>
</MT_MyObjects>
[Serializable]
[XmlRoot("MT_LoadProfile")]
public class LoadProfArray : List<LoadProfile>
{
    //....
}
对于类型列表,生成的XML如下所示:

<ArrayOfMyObjects>
    <MyObject>
    //content here
    </MyObject>
</ArrayOfMyObjects>

//满足于此
但另一方(该文件的接收者)的期望如下:

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;
        }
<MT_MyObjects>
    <MyObject>
    //content here
    </MyObject>
</MT_MyObjects>
[Serializable]
[XmlRoot("MT_LoadProfile")]
public class LoadProfArray : List<LoadProfile>
{
    //....
}

//满足于此
那么,如何在序列化时将ArrayOfMyObject更改为MT_MyObject呢?我知道也可以使用一些Regx替换来完成。但我不想稍后再接触输出

更新:解决方案:

我最终可以这样解决这个问题:

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;
        }
<MT_MyObjects>
    <MyObject>
    //content here
    </MyObject>
</MT_MyObjects>
[Serializable]
[XmlRoot("MT_LoadProfile")]
public class LoadProfArray : List<LoadProfile>
{
    //....
}
[可序列化]
[XmlRoot(“MT_LoadProfile”)]
公共类LoadProfArray:列表
{
//....
}

在课堂上,用

[XmlArray("MT_MyObjects"), XmlArrayItem(typeof(MyObject))]

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

[XmlRoot("DocumentTypes")]
public class DocumentTypeEntityCollection
{

    [XmlElement("Type")]
    public  List<DocumentTypeEntity> Items { get; set; }
}
[XmlRoot(“文档类型”)]
公共类DocumentTypeEntityCollection
{
[XmlElement(“类型”)]
公共列表项{get;set;}
}
这将创建以下输出:

<?xml version="1.0" encoding="utf-8" ?>
<DocumentTypes>
  <Type>
    <TypeID>7</TypeID>
   ....

7.
....

请查看以下示例: /步骤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>
    {

    }

你的类定义在哪里?放一个片段。这也是你试图序列化的列表吗?你能举个例子吗,我已经试过了,但还没有成功。