我遇到需要使用数据协定序列化使用 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"。我怎样才能做到这一点。
string result = decimalValue.ToString("F");
如果要覆盖默认的小数ToString()
行为,则必须创建自己的类类型。
//编辑
如果要使用其他格式序列化十进制,则可以执行一个技巧。也许你觉得它很有用。
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 = (...)
}
string viewTotalAmount1 = String.Format("{0:0.00}", TotalAmount1);