Serializer忽略使用另一个序列化属性的属性

时间:2014-01-08 12:39:26

标签: c# asp.net json serialization

我正在使用默认的序列化程序在asp.net中的一个端点上工作,该端点序列化并返回一些数据。

消费应用程序正在更改属性的名称之间转换(换句话说,一些现有应用程序使用的名称如... Vat;而较新的应用程序正在使用... Tax。因此我需要在响应中保留两个名称目前,直到这些变化完成。

返回类型是IList。

public class Product
{
    ...
    public decimal PriceIncVat { get; set; }
    public decimal PriceIncTax { get { return PriceIncVat; } }
    public int TaxCode { get; set; }
    ...
}

但是,当我在fiddler中检查响应时,只有PriceIncVat属性存在于json产品列表中。

我想不出为什么上述行为不起作用的任何理由。我在PriceIncTax的同时添加了TaxCode,然后返回,所以我知道端点的代码是最新的。

在新客户项目的客户端,我们有:

public class ProductDto
{
    ...
    public decimal PriceIncTax { get; set; }
    public string TaxCode { get; set; }
    ...
}

非常困惑。

1 个答案:

答案 0 :(得分:0)

序列化程序假设您需要在一段时间内反序列化数据。因此,默认情况下,只考虑具有getter 设置器的属性。

使用DataContractJsonSerializer时,可以使用SerializeReadOnlyTypes属性打开只读属性的序列化(尽管它具有相当误导性的名称)。

附注:检查Json.NET serializer,它提供了更多选项并更好地控制(反)序列化过程。