使用XmlSerializer序列化为XML字符串时的序列化值

问题描述:

我正在使用XmlSerializer将我的对象模型序列化为XML。在刚刚开始实施之前,我通过我的整个模型进行回溯,并根据某些属性将任意值舍入到1或2个小数位。使用XmlSerializer序列化为XML字符串时的序列化值

有没有办法通过子类化XmlSerializer来做到这一点。我试着覆盖保护覆盖void Serialize(object o,XmlSerializationWriter writer)方法,但它永远不会被调用。

这里是我的代码,不会序列化区块:

StringWriter writer = new Utf8StringWriter(); 

XmlWriter xml = XmlWriter.Create(writer, new XmlWriterSettings() { Encoding = writer.Encoding }); 

new MySubClassSerializer(engine.GetType()).Serialize(xml, engine); 

我的子类的串行器不会在此刻做任何事情只是子类到它的父。

+0

不用手动具有名字轮每个类的每个字段,你也许可以使用反射来寻找浮点字段和他们周围的所有程序。 – 2012-03-15 21:22:32

+0

@Moozhe所以我仍然必须递归地检查我的模型检查属性名称并根据需要进行设置。考虑到我假设XMLSerializer已经有这种类型的东西,我希望避免这种额外的开销?嗯,实际上我希望使用现有的XMLSerializer类的更优雅的解决方案等 – dreza 2012-03-15 21:34:41

+0

正确。速度明智,它不会很快,但代码明智,它会需要很少的代码,你可以添加字段,而不必更新现有的序列化代码。你也可以实现IXmlSerializable并自己编写序列化。从理论上讲,这将和正常的方式一样快,但它会是更多的代码。我不认为你可以得到两全其美的好处。 – 2012-03-15 21:41:56

如果将这些值包含在另一个属性中,该怎么办?就像这样:

[XmlIgnore()] 
public float SomeValue { get; set; } 

[XmlAttribute("SomeValue")] 
public float SomeValueRounded 
{ 
    get { return (float)Math.Round(SomeValue, 2); } 
    set { SomeValue = value; } 
} 
+0

我已经考虑过了,但是我还需要做很多属性。如果我能摆脱这种困境,我希望不得不避免这种方法。 – dreza 2012-03-15 21:07:35