簡體   English   中英

C#XML序列化和十進制值

[英]C# XML Serialization and Decimal Value

我正在使用XmlSerializer將包含小數的C#對象序列化為xml字符串

例如

AnObject.ADecimalValue

我發現精度尤其在變化,即使我顯式舍入為以下值,一些值在點之后也得到四個值的輸出,例如12564.39得到的輸出為12564.3900

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

序列化代碼如下。

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

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

        string result = writer.ToString();

        return result;
    }

如何確保小數點后僅輸出兩個值

您可以實現IXmlSerializable來重新定義序列化對象的方式嗎?

文檔在這里以及如何implment一個好擊穿這里

然后有人在這里發表了與您的問題相似(但不相關)的帖子。 您可以正確舍入小數點,看看是否可行,否則可以將其寫為字符串。

我認為四舍五入浮點數不會對此有所幫助。 序列化器會根據自己的規則將數字轉換為字符串。 最好的辦法是引入一個新的字符串屬性,並在其中格式化數字並序列化它而不是原始數字。

有關該主題的更多信息,類似的問題: 您可以為日期時間的XmlSerialization指定格式嗎?

這是我解決類似問題的方式,它對我來說非常有效。

    private decimal  price;

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

就我而言,我將其轉換為貨幣,但是您可以使用price.ToString(“ 0.00”)將XML元素轉換為帶有2個零的十進制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM