【问题标题】:how to set a readonly property value in Json.net in the JsonConverter如何在 JsonConverter 中的 Json.net 中设置只读属性值
【发布时间】:2012-11-07 18:31:30
【问题描述】:

我正在使用 Json.net 4.5。我正在使用 JsonConverter 将数据从一个版本转换为另一个版本。

版本 1

    public class AV1
    {
        public string PNr { get; set; } // "x253yN-69Uj"
    }

第 2 版

    public class AV2
    {
        public string FirstNr { get; private set; } // "x253yN"
        public string LastNr { get; private set; } // "69Uj"

        public void SetFirstAndLastNr(string a, string b, string c)
        {
            //Logic to set the values of FirstNr and LastNr
        }
    }

在派生的 JsonConverter 中,我正在创建 AV2 类的实例。但是由于属性现在是只读属性,我应该如何设置这些属性的值? Json.net 是否提供任何方法来做同样的事情?还是我必须使用反射?

【问题讨论】:

  • JSON.NET 有很多开箱即用的序列化程序没有的好特性。它甚至被 Microsoft 自己用作其产品之一(ASP.NET Web API)的默认序列化程序。
  • 参数abc在类AV2中的方法SetFirstAndLastNr上是什么意思?
  • @carlosfigueira - 参数 a、b、c 是一些用于查询存储库的查询参数,并根据查询结果计算一个唯一编号,该编号现在分为此 FirstNr 和 LastNr。还有其他示例,例如逻辑路径和文档名称等。但我认为我们根本不需要担心这种方法

标签: c# serialization json.net


【解决方案1】:

如果你想反序列化只读属性,不妨试试这个

public class AV2
{
    [JsonProperty]
    private readonly string _firstNr;
    [JsonProperty]
    private readonly string _lastNr;
    public string FirstNr => _firstNr// "x253yN"
    public string LastNr => _lastNr// "69Uj"


}

【讨论】:

    【解决方案2】:

    正如您所说,您有数百个不同的类需要转换,JsonDeserializer 可能不是最佳选择。

    看看像 AutoMapper 之类的其他解决方案也不错:http://automapper.org/ , https://github.com/AutoMapper/AutoMapper

    如果您花一两个小时查看示例代码,您会发现将不同的对象相互转换(映射)是如此强大和灵活。

    【讨论】:

      猜你喜欢
      • 2016-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-26
      相关资源
      最近更新 更多