c# - 使用注释将嵌套的 JSON 结构反序列化为使用 Json.NET 的扁平类

是否可以使用 JsonProperty 注释将嵌套的 Json 属性映射到非嵌套的 .NET 成员?假设你有一些这样的 Json:

{
     "id":9999,
     "created_date":"Thu, 23 Jun 2011 12:56:24 +0000",
     "pos":{
        "type":"someType",
        "coordinates":[
           59.323,
           18.0654
        ]
     }
}

并希望将其反序列化为扁平类 MyClass 使用

JsonConvert.DeserializeObject<MyClass>(jsonstr);

下面的类中是否可以使用注解将Json坐标列表映射到Lat和Lng:

public class MyClass {
   [JsonProperty("id")]
   public int Id { get; set; }
   [JsonProperty("created_date")]
   public DateTime Created { get; set; }
   [JsonProperty("????")]
   public float Lat { get; set; }
   [JsonProperty("?????")]
   public float Lng { get; set; }
}

只是好奇。我总是可以像这样定义类,它似乎工作正常:

public class MyClass {
    [JsonProperty("id")]
    public int Id { get; set; }
    [JsonProperty("date_created")]
    public DateTime Created { get; set; }
    [JsonProperty("pos")]
    public PosClass Pos { get; set; }
}

public class PosClass
{
    public List<float> coordinates { get; set; }
}

最佳答案

根据个人经验,在尝试重新使用我的实体进行通信(JSON、XML ... 等)之前,我很挣扎,但在仔细关注现有模式后,我发现有 "data transfer objects"除了您已经拥有的内部/存储实体之外,您还可以解放我的通信模型,而我支付的唯一成本是接受在两者之间进行手动但直接的手动编码转换。

如果您宁愿坚持现有的并且性能不是什么大问题,那么 .NET 反射就是您的 friend 。

https://stackoverflow.com/questions/6462148/

相关文章:

javascript - 来自json对象的Angular.js格式日期

ruby-on-rails - 为什么在 Ubuntu 中安装 JSON gem 时会出错?

json - 已启用 CORS,但在 POST JSON 时,预检响应的 HTTP 状态代码 404

java - jackson 在通用列表中读取 json

c++ - JSONCPP 写入文件

javascript - 无法重新初始化 JQuery DataTable

c# - 分配给单个属性的多个 JsonProperty 名称

c# - 如何使用 C#/LINQ 将 XML 转换为 JSON?

javascript - 通过 AJAX 和 jQuery 从 PHP 数组中获取数据

eclipse - Jersey :找不到 Java 类和 MIME 媒体类型应用程序/json 的