В службах WCF не удается перейти на DataContract Serialization
прямо сейчас. Мне нужно управлять поведением xml-serialization по умолчанию.Настройка XmlSerialization в WCF?
Вот мои классы POCO, на которых мне нужно получить полный контроль над процессом сериализации.
[Serializable]
public class ProductBase
{
public int Id { get; set; }
}
[Serializable]
public class DurableProduct : ProductBase
{
public string Name { get; set; }
public Price Pricing { get; set; }
}
[Serializable]
public class Price : IXmlSerializable
{
public int Monthly { get; set; }
public int Annual { get; set; }
}
мне нужен контроль над сериализации процессом классов DurableProduct
, Price
. Таким образом, я реализовал IXmlSerializable
этих классов, как показано ниже -
[Serializable]
public class DurableProduct : ProductBase, IXmlSerializable
{
public string Name { get; set; }
public Price Pricing { get; set; }
public XmlSchema GetSchema()
{
return null;
}
public void ReadXml(XmlReader reader)
{
Id = int.Parse(reader.ReadElementString());
Name = reader.ReadElementString();
}
public void WriteXml(XmlWriter writer)
{
writer.WriteElementString("Id", Id.ToString());
writer.WriteElementString("Name", Name);
}
public override string ToString()
{
return string.Format("Id : {0}, Name: {1}, Monthly: {2}", Id, Name, Pricing.Monthly);
}
}
[Serializable]
public class Price : IXmlSerializable
{
public int Monthly { get; set; }
public int Annual { get; set; }
public XmlSchema GetSchema()
{
return null;
}
public void ReadXml(XmlReader reader)
{
//Control never reaches here, while deserializing DurableProduct
Monthly = int.Parse(reader.ReadElementString());
Annual = int.Parse(reader.ReadElementString());
}
public void WriteXml(XmlWriter writer)
{
//Control never reaches here, while deserializing DurableProduct
writer.WriteElementString("MyCustomElement1", Monthly.ToString());
writer.WriteElementString("MyCustomElement2", Annual.ToString());
}
}
Проблема При попытке сериализации/десериализации там классы IXmlSerializable => ReadXml/WriteXml
не называют.
Как я реализую свои классы так, что все чтения/записи реализаций IXmlSerializable надежно вызывается.