【问题标题】:.NET XmlSerializer : How to replace name of the xml tag?.NET XmlSerializer:如何替换 xml 标签的名称?
【发布时间】:2011-03-09 11:31:33
【问题描述】:

对于某些数据导出,我们所做的只是使用 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>
{
    //....
}

【问题讨论】:

  • 你的类定义在哪里?放一个sn-p。这也是您尝试序列化的列表吗?

标签: .net xmlserializer


【解决方案1】:

对于序列化数组,您可以定义控制对象如何序列化的属性。但是如果对象是一个列表,你需要创建一个类并继承它,然后定义属性:

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

【讨论】:

    【解决方案2】:

    在你的班级中,用

    装饰属性
    [XmlArray("MT_MyObjects"), XmlArrayItem(typeof(MyObject))]
    

    【讨论】:

    • 你能举个例子吗,我试过了,但还没有成功。
    【解决方案3】:

    请在下面找到示例: /第一步/ 集合被序列化的虚拟类

    [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()
            {
    
            }
        }
    

    /第二步/ 创建一个列表集合并应用 XMLRootElement

    [XmlRoot("Test")]
        public class MyObjectCollection: List<MyObject>
        {
    
        }
    

    /第三步/

    用数据填充 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;
                }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-16
      • 1970-01-01
      • 2014-07-09
      • 1970-01-01
      • 2012-03-10
      • 2012-09-01
      • 2013-06-19
      • 1970-01-01
      相关资源
      最近更新 更多