2012-04-26 12 views
0

私は、XMLC#のXMLシリアル化と10進値

例えばの文字列に小数点が含まれているC#のオブジェクトをシリアル化するために、XmlSerializerを使用しています

AnObject.ADecimalValue 

私は明示的に丸いいくつかの値以下として、例えばポイントの後に4つの値で出力を取得している場合でも、特に変化している私は精度を見つけています12564.39は、直列化コードは、以下である出力

AnObject.ADecimalValue = decimal.Round(AnObject.ADecimalValue, 2);

12564.3900ようになります。

XmlSerializer serializer = new XmlSerializer(typeof(AnObject)); 

    using (StringWriter writer = new StringWriter()) 
    { 
     serializer.Serialize(writer, source); 

     string result = writer.ToString(); 

     return result; 
    } 

どのように私は2つの値を確保することができますが、小数点

+0

文字列にする –

答えて

1

後に出力出ている私は、浮動小数点数を丸めることは、これを助けることができるとは思いません。シリアライザは、それ自身の規則に従って数値を文字列に変換します。あなたができることは、新しい文字列プロパティを導入し、その中の数字をフォーマットし、元の数字の代わりにそれをシリアル化することです。

、トピックに関するその他の同様の問題: Can you specify format for XmlSerialization of a datetime?

1

あなたがあなたのオブジェクトをシリアル化する方法を再定義するIXmlSerializableを実装してもらえますか?

ドキュメントhereとそれを実装する方法の良い内訳here

投稿者hereあなたと同様の(ただし関連していない)問題の投稿者があります。あなたは小数点を正しく丸めて、それがうまくいくかどうかを調べることができます。そうでなければ、文字列として書くことができます。

0

これは私が同様の問題を解決した方法で、完全に私のために働いています。私の場合は

private decimal price; 

    [XmlElement(DataType="decimal")] 
    public string Price 
    { 
     get { return price.ToString("c"); } 
     set { price = Convert.ToDecimal(value); } 
    } 

、私は通貨にそれを変換していますが、2ゼロで小数にXML要素を変換するprice.ToString(「0.00」)を使用することができます。

+0

'DataType =" decimal "引数を追加すると、" decimalはプロパティXmlElementAttribute.DataTypeの無効な値です。decimalはSystem.Stringに変換できません "というメッセージとともにランタイムInvalidOperationExceptionが発生しました。 (メッセージはローカライズされていたので、英語に翻訳して少し違うかもしれないことに注意してください)。 –