Reputation: 4882
I am using the following code to Serialize / Deserialize from object to XML
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);
}
}
To make this code work with IDictionary, i have the following custom Dictionary class:
[CollectionDataContract(Name = "Kenan", ItemName="Items", KeyName="Row", Namespace="spell", ValueName="Values")]
public class CustomRowList : Dictionary<RowXML, List<ColumnXML>>
{
}
The problem is, that when the code outputs my
Dictionary<RowXML, List<ColumnXML>>
it looks like this:
I do not need the <Items>
and <Values>
nodes. Instead, i would like it for output it as:
<RowList>
<Row>
<Title></Title>
<Help_Text></Help_Text>
<ClassName></ClassName>
<ColumnList>
<Column>
<ClassName></ClassName>
<Help_Text></Help_Text>
<Title></Title>
</Column>
<Column>
...
How can i make DataContractSerializer format my Dictionary in this way? I tried setting the
ItemName
And
ValueName
on
[CollectionDataContract]
Properties to blank, but this didnt work.
Upvotes: 0
Views: 962
Reputation: 6332
Looks like, you want to customize the xml output of your collection class. Only way to achieve this expected output is to implement the IXmlSerializable interface as below.
[CollectionDataContract(Name = "Kenan", ItemName="Items", KeyName="Row", Namespace="spell", ValueName="Values")]
public class CustomRowList : Dictionary<RowXML, List<ColumnXML>>, IXmlSerializable
{
}
Please look here for more information
Proper way to implement IXmlSerializable?
Upvotes: 2