2011-03-09 73 views
2

對於某些數據導出,我們正在做的只是使用XmlSerializer序列化.Net對象,如列表或集合。我們用這樣的:.NET XmlSerializer:如何替換xml標籤的名稱?

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也可以這樣做,但我希望不要碰到OUTP?稍後。

更新:解決的辦法:

我可以解決最終像這樣的問題:

[Serializable] 
[XmlRoot("MT_LoadProfile")] 
public class LoadProfArray : List<LoadProfile> 
{ 
    //.... 
} 
+0

哪裏是你的類定義?放入一個片段。這是你嘗試連載的列表嗎? – Aliostad 2011-03-09 11:33:32

回答

7

的財產連載陣列,您可以定義支配對象如何序列化的屬性。但是,如果對象是一個列表,你需要創建一個類,從它繼承並定義的屬性:

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

在你的類,裝飾用

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

你可以請一些例子,我已經嘗試過,但還沒有取得成功。 – Kangkan 2011-03-10 08:10:33

2

請在下面找到實例: /第一步/ 虛設類,其收集是要序列

[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; 
      }