簡體   English   中英

如何序列化字典 <string,List<Custom Type> &gt;到XML

[英]How to Serialize a Dictionary<string,List<Custom Type>> to XML

我有一個自定義類:

public class DicExpense
{
    [XmlElement]
    public string EmployeeName { get; set; }

    [XmlElement]
    public string Company { get; set; }        
}

我將其放入這樣的字典中:

  var dict = new Dictionary<string, List<DicExpense>>();
  dict.Add("Expense1",new List<DicExpense>())
  dict["Expense1"].Add(new DicExpense() {EmployeeName = "Sam", Comment = "something"})
  dict["Expense1"].Add(new DicExpense() {EmployeeName = "Sam", Comment = "something"})


  dict.Add("Expense2",new List<DicExpense>())
  dict["Expense2"].Add(new DicExpense() {EmployeeName = "John", Comment = "something"})
  dict["Expense2"].Add(new DicExpense() {EmployeeName = "John", Comment = "something"})

我想將其序列化為XML:

 <Expense>
 <key>Expense1</key>
 <EmployeeName>Sam</EmployeeName>
 <Comment>something</Comment>
 <EmployeeName>John</EmployeeName>
 <Comment>something</Comment>
 </Expense>

我在嘗試這個:

 StringBuilder output = new StringBuilder();
 var writer = new StringWriter(output);

 XmlSerializer serializer = new XmlSerializer(typeof(Dictionary<string,     List<DicExpense>>));
 serializer.Serialize(writer, records);
 Console.WriteLine(output);

但它不起作用。 當你有一個自定義類型集合的值時,有沒有辦法序列化它?

如果要序列化/反序列化使用Dictionary<TKey, TValue> ,請使用DataContractSerializer

 [DataContract(Name = "Expense")]
 public class DicExpense
 {       
    [DataMember]
    public string EmployeeName { get; set; }

    [DataMember(Order = 0)]
    public string Company { get; set; }
  }

 var dict = new Dictionary<string, List<DicExpense>>();
 dict.Add("Expense1", new List<DicExpense>());
 dict["Expense1"].AddRange(new List<DicExpense>
 {
    new  DicExpense()
    {
        EmployeeName = "Sam",
        Company = "company1"
    },
    new DicExpense()
    {
        EmployeeName = "John",
        Company = "company1"
    }
 });

 dict.Add("Expense2", new List<DicExpense>());
 dict["Expense2"].AddRange(new List<DicExpense>
 {
     new DicExpense()
     {
         EmployeeName = "Smith",
         Company = "company2"
      },
      new DicExpense()
      {
         EmployeeName = "John",
         Company = "company2"
      }
 });

 var serializer = new DataContractSerializer(typeof(Dictionary<string, List<DicExpense>>));
 using (var writer = XmlWriter.Create(Console.Out))
 {
      serializer.WriteObject(writer, dict);
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM