【问题标题】:datacontract serializer decimal formattingdatacontract 序列化程序十进制格式
【发布时间】:2023-04-09 18:44:01
【问题描述】:

我遇到需要使用数据契约序列化来使用 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 };

TotalAmount1、TotalAmount2、TotalAmount3 中缺少最后一个“0”。 如果我有非零值,那么它工作正常。

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

【问题讨论】:

    标签: c# wcf datacontractserializer


    【解决方案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 = (...)
    }
    

    【讨论】:

    • 嗨,我只想知道在我的 wcf 服务器中,我可以看到返回值为“268.20”,但在消费者端序列化后,我只能看到“268.2”。我怎样才能在客户端中将小数保留为“268.20”。
    • 我添加了额外的解决方案
    【解决方案2】:
    string viewTotalAmount1 = String.Format("{0:0.00}", TotalAmount1);
    

    【讨论】:

    • 谢谢.. 但是数据类型应该是十进制的。
    • 在数字后面添加 0 是格式化,而不是类型的一部分。我假设您正在显示值,不是吗?如果您正在显示它们,那么如果您使用小数的标准格式来格式化它们有什么区别?
    • 我正在使用 SOA。因此,在消费完这个之后,我会将这个值转发给我的消费者。所以我不想把它改成字符串。另一件事是,我的预期结果是“268.20”。当我进行单元测试时,我需要用“268.2”断言这个“268.20”。在这里我的测试总是失败。
    • 再次...这是格式问题,而不是小数类型问题。
    猜你喜欢
    • 2013-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    相关资源
    最近更新 更多