datacontract序列化器十进制格式

时间:2017-10-25 06:13:07

标签: c# wcf datacontractserializer

我遇到需要使用datacontract序列化来使用Wcf服务的情况。所以我创建了示例wcf应用程序并模拟了一些数据,如下所示,

return new Obj {
TotalAmount1 = (decimal)268.20,
TotalAmount2 = (decimal)12.00,
TotalAmount3 = (decimal)268.20,
TotalAmount4 = (decimal)17.55 };

[DataContract]
Class Obj
{
[DataMember]
public Decimal TotalAmount1 {get; set;}
[DataMember]
public Decimal TotalAmount2 {get; set;}
[DataMember]
public Decimal TotalAmount3 {get; set;}
[DataMember]
public Decimal TotalAmount4 {get; set;}
}

现在, 虽然从具有这样的值的客户端消费此结果,

{
TotalAmount1 = 268.2,
TotalAmount2 = 12.0,
TotalAmount3 = 268.2,
TotalAmount4 = 17.55 };

最后" 0" TotalAmount1,TotalAmount2,TotalAmount3中缺少。 如果我有非零值,那么它的工作正常。

现在,我需要TotalAmount1应该像" 268.20"。我怎样才能做到这一点。

2 个答案:

答案 0 :(得分:1)

string result = decimalValue.ToString("F");

如果要覆盖默认的十进制ToString()行为,则必须创建自己的类Type。

//编辑
如果你想用额外的格式序列化十进制,你可以做一个技巧。也许你发现它很有用。

public decimal TotalAmount1 { get; set; }
[DataMember(Name = "TotalAmount1")]
private string TotalAmount1Serialized { get; set; }

[OnSerializing]
void OnSerializing(StreamingContext context)
{
    this.TotalAmount1Serialized = TotalAmount1.ToString("F");
}

[OnDeserialized]
void OnDeserializing(StreamingContext context)
{
    this.PerformanceDate = (...)
}

答案 1 :(得分:0)

string viewTotalAmount1 = String.Format("{0:0.00}", TotalAmount1);