2013-06-05 63 views
0

我很想使用默認的.Net xml序列化器將我的數據保存爲簡單的xml格式。我有一個enum MemberCode { feild1 = 1, feild2 = 2 /*...*/}在運行時,我生成List<MemberCode>我想保存到XML(有時更少有時)的成員。如何在.Net中實現動態部分XML類序列化?

如何實現這樣的部分類序列化?

+0

你的意思'XmlIgnore'?根據班級的規模化,系列化可能不是要走的路,可能只要自己編寫一個序列化程序可能更簡單 – Sayse

+0

,但請注意,我的列表是在運行時生成的。 – myWallJSON

+0

您可以編寫一個自定義序列化器方法,將列表作爲參數 – Sayse

回答

0

以下代碼可能會解決您的問題。

我們創建了一個名爲MemberList的可序列化的類,它包含一個MemberCodes數組。在運行時填充成員代碼列表後,我們將其轉換爲數組並將其序列化爲XML。結果將被保存到調試文件夾中名爲「test.xml」的文件中。

XML輸出

<?xml version="1.0" encoding="utf-8"?> 
    <MemberList xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
     <Members> 
     <Member>Field1</Member> 
     <Member>Field2</Member> 
     <Member>Field3</Member> 
     <Member>Field2</Member> 
     <Member>Field1</Member> 
     <Member>field4</Member> 
     </Members> 
    </MemberList> 

代碼:

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Xml.Serialization; 

namespace ConsoleApplication1 
{ 
    public class Program 
    { 
     static void Main(string[] args) 
     { 
      // Your member code list 
      List<MemberCode> list = new List<MemberCode>(); 

      // Add some members to the list during runtime (replace with your logic) 
      list.Add(MemberCode.Field1); 
      list.Add(MemberCode.Field2); 
      list.Add(MemberCode.Field3); 
      list.Add(MemberCode.Field2); 
      list.Add(MemberCode.Field1); 
      list.Add(MemberCode.field4); 

      // Create a new serializable member list 
      MemberList memberList = new MemberList(); 
      // Convert your list to a serializable array 
      memberList.MemberCode = list.ToArray(); 

      // Write the XML to a file 
      XmlSerializer serializer = new XmlSerializer(typeof(MemberList)); 
      TextWriter writer = new StreamWriter("test.xml"); 
      serializer.Serialize(writer, memberList); 

      Console.ReadLine(); 
     } 
    } 

    [XmlRoot] 
    public class MemberList 
    { 
     [XmlArray("Members")] 
     [XmlArrayItem("Member", typeof(MemberCode))] 
     public MemberCode[] MemberCode { get; set; } 
    } 

    public enum MemberCode 
    { 
     Field1 = 1, 
     Field2 = 2, 
     Field3 = 3, 
     field4 = 4 
    } 
}