РЕДАКТИРОВАТЬ: решение моей проблемы заключается в реализации IXMLSerializer. Спасибо всем за быстрый ответ.
Привет всем, у меня есть эта проблема, и я, кажется, не могу найти правильное решение для нее.
У меня есть следующий класс
public class Child
{
private int _id;
public int Id
{
get { return _id; }
set { _id = value; }
}
}
[Serializable]
public class Test: ISerializable
{
private int _id;
public int Id
{
get { return _id; }
set { _id = value; }
}
private Child _child = new Child();
public Child Child
{
get { return _child; }
set { _child = value; }
}
public Test()
{
}
protected Test(SerializationInfo info, StreamingContext context)
{
if (info.MemberCount > 1)
Child.Id = info.GetInt32("ChildId");
}
#region ISerializable Members
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("ChildId", Child.Id);
}
#endregion
}
Если я отправлю следующий XML для десериализации
<?xml version="1.0" encoding="utf-16"?><Test><Id>0</Id><ChildId>10</ChildId></Test>
с использованием следующего кода для десериализации
serializer.Deserialize(new StringReader("<?xml version="1.0" encoding="utf-16"?><Test><Id>0</Id><ChildId>10</ChildId></Test>");
Я предполагал, что это вызовет мой конструктор сериализации, но дело в том, что его никогда не вызывают.
Я использую приведенный выше XML вместо этого
<?xml version="1.0" encoding="utf-16"?><Test><Id>0</Id><Child><Id>10</Id></Child></Test>
Поскольку я отправляю xml из другого приложения, мне нужно вручную создавать дочерние объекты и присваивать его значение вручную из конструктора.
Я буду очень признателен за всю помощь и руководство, которое вы можете оказать мне.