[英]C# serialize decimal to xml
我有一個小數屬性,比如
[XmlElementAttribute(DataType = "decimal")] decimal Price
問題是我想強制它總是以 2 的精度序列化,但如果價格是 10.50,它將被序列化為 XML,如<Price>10.5</Price>
。
有什么方法可以強制它(不創建新屬性或更改此屬性的獲取?我正在尋找一些方法來做到這一點,只將模式發送到 XmlSerializer(或 XmlElementAttribute)或任何聰明的方法來做到這一點?
謝謝
我遇到了相反的問題。 我的小數用 4 個小數位進行序列化,即使它們都是 4 個零。 我發現如果我調用decimal.Round(value, 2)
那么它會序列化到 2 個小數位。 看起來 Decimal 類型在序列化時也會記住您上次對其進行四舍五入的內容。
我對這個建議持懷疑態度,但它很簡單。 盡管該值不需要四舍五入,但調用 Round 會改變序列化中出現的小數位數。
您可以將XmlIgnore
添加到實際的十進制屬性並引入一個新屬性 PriceAsString,它以字符串形式返回,嗯,價格(10.5 0格式)。
您當然也可以實現IXmlSerializable
並自己做所有事情。
然而,這些方式都不是真正的搖滾,你已經說過無論如何你都不會走這條路……
我有幾個int
分配給decimal
屬性(要序列化的對象)。 XML Serializer 需要用 2 個小數寫入它們,但結果卻沒有小數。
假設
var myInt = 3;
沒有成功:
設置需要通過序列化的屬性
obj.Property = decimal.Round((decimal)myInt, 2);
導致在序列化時不寫入小數。
成功:
和
obj.Property = decimal.Parse(d.ToString("n2", CultureInfo.InvariantCulture), NumberStyles.Any, CultureInfo.InvariantCulture);
我得到兩位小數。
現在我在設置屬性時使用這些擴展方法:
/// <summary>
/// For XML serialization.
/// </summary>
public static class DecimalSerializationHelper
{
public static decimal WithTwoDecimals(this decimal d)
=> decimal.Parse(d.ToString("n2", CultureInfo.InvariantCulture), NumberStyles.Any, CultureInfo.InvariantCulture);
public static decimal WithTwoDecimals(this int x) => ((decimal)x).WithTwoDecimals();
}
所以它看起來像
obj.Property = myInt.WithTwoDecimals();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.