Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#将十进制序列化为xml_C#_Xml_Serialization - Fatal编程技术网

C#将十进制序列化为xml

C#将十进制序列化为xml,c#,xml,serialization,C#,Xml,Serialization,我有一个十进制属性,比如 [xmlementattribute(DataType=“decimal”)]十进制价格 问题是我想强制它总是以2的精度进行序列化,但是如果价格是10.50,它将被序列化为XML,如10.5 有什么方法可以强制它(不创建新属性或更改此属性的get?我正在寻找某种方法来实现这一点,只向XmlSerializer(或XmlElementAttribute)发送一个模式,或者任何智能方法来实现这一点 谢谢您可以将XmlIgnore添加到实际的decimal属性中,并引入一个新

我有一个十进制属性,比如

[xmlementattribute(DataType=“decimal”)]十进制价格

问题是我想强制它总是以2的精度进行序列化,但是如果价格是10.50,它将被序列化为XML,如
10.5

有什么方法可以强制它(不创建新属性或更改此属性的get?我正在寻找某种方法来实现这一点,只向XmlSerializer(或XmlElementAttribute)发送一个模式,或者任何智能方法来实现这一点


谢谢

您可以将
XmlIgnore
添加到实际的decimal属性中,并引入一个新的属性PriceAsString,它以字符串形式返回价格(10.50格式)

当然,您也可以实现
IXmlSerializable
,并自己完成所有事情


然而,所有这些方法都没有真正起作用,而且你已经说过你无论如何都不会走这条路……

我遇到了相反的问题。我的小数是用4位小数序列化的,尽管它们都是4位零。我发现如果我调用
decimal.Round(值,2)
然后将其序列化为2位小数。似乎decimal类型在序列化时也会记住上次对其进行四舍五入的内容


我对这个建议表示怀疑,但它很简单。尽管值不需要舍入,但调用舍入更改了序列化中显示的小数位数。

我处理的是同一个问题,找到了您的问题,然后找到了不同的答案。检查一下。@Jim……答案到底是什么?如何一个链接?@JK我想它是一个。很好!我所做的就是在设置一个值时使用decimal.Round和所需的精度。这是真正的答案!我被要求输出一个硬编码的值“0.00”,并且(在VB.NET中)这是唯一有效的:decimal.Round(0.00D,2)它有效,因为decimal用浮点存储值(即550.0000存储为5500000*10^-4,如果您将其四舍五入为2位小数,它将成为55000*10^-2),很明显,序列化程序只取其中的任何内容,然后根据指数放入小数点。如果您有一个带1dp的小数点,并且尝试将其四舍五入为2,则此操作无效。我这样做:decimal.round(值*1.00m,2)