C#XML序列化和十进制值
我正在使用XmlSerializer将包含十进制数的C#对象序列化为xml字符串 e、 g 我发现精度特别不同,即使我显式四舍五入如下,一些值在该点后以四个值输出,例如12564.39以12564.3900输出C#XML序列化和十进制值,c#,xml,xml-serialization,decimal,C#,Xml,Xml Serialization,Decimal,我正在使用XmlSerializer将包含十进制数的C#对象序列化为xml字符串 e、 g 我发现精度特别不同,即使我显式四舍五入如下,一些值在该点后以四个值输出,例如12564.39以12564.3900输出 AnObject.ADecimalValue=decimal.Round(AnObject.ADecimalValue,2) 下面是序列化代码 XmlSerializer serializer = new XmlSerializer(typeof(AnObject));
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
来重新定义序列化对象的方式
文档和如何实现它的良好分解
然后有一个帖子是由一个和你有类似(但不相关)问题的人写的。您可以正确地对小数进行四舍五入,看看是否有效,如果无效,则可以将其作为字符串写出。以下是我解决类似问题的方法,它对我来说非常有效
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个零的十进制 添加DataType=“decimal”
参数给了我一个运行时InvalidOperationException,消息是“decimal是属性XmlElementAttribute.DataType.decimal的无效值,无法转换为System.String。”(请注意,消息是本地化的,我将其翻译回了英语,因此可能会有一些不同)。
private decimal price;
[XmlElement(DataType="decimal")]
public string Price
{
get { return price.ToString("c"); }
set { price = Convert.ToDecimal(value); }
}