2012-05-08 35 views
0

我使用下面的代码序列化/从对象反序列化到XML如何使用DataContractSerializer格式化IDictionary的序列化?

using System.Runtime.Serialization; 
public static string Serialize<T>(this T obj) 
     { 
      var serializer = new DataContractSerializer(obj.GetType()); 
      using (var writer = new StringWriter()) 
      using (var stm = new XmlTextWriter(writer)) 
      { 
       serializer.WriteObject(stm, obj); 
       return writer.ToString(); 
      } 
     } 

     public static T Deserialize<T>(this string serialized) 
     { 
      var serializer = new DataContractSerializer(typeof(T)); 
      using (var reader = new StringReader(serialized)) 
      using (var stm = new XmlTextReader(reader)) 
      { 
       return (T)serializer.ReadObject(stm); 
      } 
     } 

为了与IDictionary的此代码的工作,我有以下的自定义词典类:

[CollectionDataContract(Name = "Kenan", ItemName="Items", KeyName="Row", Namespace="spell", ValueName="Values")] 
public class CustomRowList : Dictionary<RowXML, List<ColumnXML>> 
{ 

} 

的问题是,当代码输出我

Dictionary<RowXML, List<ColumnXML>> 

它看起来像这样:

enter image description here

我不需要<Items><Values>节点。相反,我想它的输出为:

<RowList> 
<Row> 
<Title></Title> 
<Help_Text></Help_Text> 
<ClassName></ClassName> 
<ColumnList> 
<Column> 
<ClassName></ClassName> 
<Help_Text></Help_Text> 
<Title></Title> 
</Column> 
<Column> 
... 

我怎么能这样做的DataContractSerializer格式我的字典?我试着

[CollectionDataContract] 

属性设置

ItemName 

而且

ValueName 

空白,但这没有工作。

回答

2

看起来,您想要自定义集合类的xml输出。实现此预期输出的唯一方法是实现IXmlSerializable接口,如下所示。

[CollectionDataContract(Name = "Kenan", ItemName="Items", KeyName="Row", Namespace="spell", ValueName="Values")] 
public class CustomRowList : Dictionary<RowXML, List<ColumnXML>>, IXmlSerializable 
{ 

} 

请看看这里的更多信息

Proper way to implement IXmlSerializable?

相关问题