我有下面的類:雙串行化定製
public class SomeClass
{
public double SomeValue {get;set;}
}
我需要XmlSerializer
序列化,但我需要用10序列中繁殖的價值和反序列化時10分才。有沒有什麼辦法來實現這個定製邏輯?
我有下面的類:雙串行化定製
public class SomeClass
{
public double SomeValue {get;set;}
}
我需要XmlSerializer
序列化,但我需要用10序列中繁殖的價值和反序列化時10分才。有沒有什麼辦法來實現這個定製邏輯?
這可能是有點哈克,但涉及的不是連載你的主要財產,但序列化的目的而提供的虛擬財產即獲取/設置支持字段爲你的主屬性格式正確。
public class SomeClass
{
private double _someValue;
[XmlIgnore()]
public double SomeValue {
get { return _someValue; }
set {_someValue = value;}
}
[XmlElement("SomeValue")]
public double SomeValueSerialised
{
get { return _someValue * 10; }
set { _someValue = value/10; }
}
}
編輯:想指出,IXmlSerializable的實施可能做到這一點更清潔的方式,但它真的取決於你的類字段的數量,以及如何懶你感到...
您可以實現自己IXmlSerializable:
public class SomeClass:IXmlSerializable
{
public double SomeValue {get;set;}
// implement here below read write as needed
// Xml Serialization Infrastructure
public void WriteXml (XmlWriter writer)
{
...
}
public void ReadXml (XmlReader reader)
{
...
}
public XmlSchema GetSchema()
{
return(null);
}
}
使用IXmlSerializable也許
您可以控制通過實現IXmlSerializable的接口序列化。 嘗試了這一點..
public class SomeClass: IXmlSerializable
{
private double someValue;
public double SomeValue
{
get{ return someValue;}
set{ someValue = value;}
}
public void WriteXml (XmlWriter writer)
{
writer.WriteString(someValue * 10);
}
public void ReadXml (XmlReader reader)
{
someValue = Convert.ToDouble(reader.ReadString())/10;
}
}
這並不適用於'XmlSerializer' – 2011-12-23 12:15:30
@Marc ..感謝指出這一點。我已經修改我的答案 – 2011-12-23 12:19:51
執行'IXmlSerializable'更比複雜一些... – 2011-12-23 12:41:09
您可能要加上'[的XmlElement( 「someValue中」)]'所以XML看起來像原來 – 2011-12-23 12:14:53
@Marc Gravell - 不知道你能做到這一點。回答修改與您的建議。 – Paddy 2011-12-23 13:42:13
而且可能是它是EditorBrowsable(EditorBrowsableState.Never)添加到SoveValueSerialized屬性實際上 – SiberianGuy 2011-12-23 15:00:27