2012-03-15 67 views
1

我正在使用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

回答

1

如果將這些值包含在另一個屬性中,該怎麼辦?就像這樣:

[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