I am trying to work out the best way to serialize nested classes without having to serialize the entire nest class member. Assuming the following the classes:
public class ClassA
{
public decimal ID { get; set; }
}
public class ClassA1 : ClassA
{
public decimal Name { get; set; }
public decimal Value { get; set; }
public decimal Description { get; set; }
}
public class ClassA2 : ClassA
{
public ClassA1 Details { get; set; }
public int SomeValue { get; set; }
}
I have a fixed list of objects of type ClassA1 that are stored in a variable of type List.
I also have a list of objects of type ClassA2 that are stored in a variable of type List
What I would like to do is serialize and deserialize my list of ClassA2 objects. Automatic serialization will serialize the entire contents of each ClassA1 object but I only want to serialize and then deserialize the ClassA1.ID member and then retrieve the object reference from my fixed list upon deserialization.
Automatic Serialization gives me this:
...
<ClassA2>
<ID>IDStringForObjectClassA2</ID>
<Details>
<ClassA1>
<ID>IDStringForObjectOfClassA1</ID>
<Name>MyNameValue</Name>
<Value>MyStringValue</Value>
<Description>MyDescriptionValue</Description>
</ClassA1>
</Details>
<SomeValue>0</SomeValue>
</ClassA2>
The end result I want in my XML is this
...
<ClassA2>
<ID>IDStringForObjectClassA2</ID>
<Details>
<ClassA1>
<ID>IDStringForObjectOfClassA1</ID>
</ClassA1>
</Details>
<SomeValue>0</SomeValue>
</ClassA2>
and on deserialization of the ClassA1.ID member, I want to locate a an actual object within a preloaded list
EDIT: Document serializer class below
public class Document
{
private _ClassA2;
public Document() { _ClassA2 = null; }
public ClassA2 ClassA2
{
get { return _ClassA2; }
set { _ClassA2 = value; }
}
public string Serialize(StreamWriter writer)
{
var serializer = new XmlSerializer(typeof(ClassA2));
serializer.Serialize(writer, this);
return writer.ToString();
}
public static ClassA2 DeSerialize(StreamReader reader)
{
var serializer = new XmlSerializer(typeof(ClassA2 ));
ClassA2 value = serializer.Deserialize(reader) as ClassA2 ;
return value;
}
}