首页 > 后端开发 > C++ > 如何在 C# 中将嵌套 JSON 属性映射到类属性?

如何在 C# 中将嵌套 JSON 属性映射到类属性?

Barbara Streisand
发布: 2025-01-24 23:06:10
原创
436 人浏览过

How to Map Nested JSON Properties to Class Properties in C#?

将 JSON 对象的子属性映射到类属性

当遇到具有分层结构的 JSON 数据时,您可能希望将 JSON 复杂对象的子属性映射到类中的简单属性。虽然 Newtonsoft.Json 框架提供 [DataMember] 属性来映射原始 JSON 数据,但它本身并不支持映射子属性。

然而,有一些方法可以实现这种映射。一种简单的方法是将 JSON 反序列化为 JObject,并使用 SelectToken 来检索所需的子属性。

例如,考虑以下 JSON 数据:

<code class="language-json">{
    "picture": {
        "id": 123456,
        "data": {
            "type": "jpg",
            "url": "http://www.someplace.com/mypicture.jpg"
        }
    }
}</code>
登录后复制

要将 url 子属性映射到类中的 ProfilePicture 属性,可以使用以下代码:

<code class="language-csharp">string json = @"
{
    ""picture"": 
    {
        ""id"": 123456,
        ""data"": 
        {
            ""type"": ""jpg"",
            ""url"": ""http://www.someplace.com/mypicture.jpg""
        }
    }
}";

JObject jo = JObject.Parse(json);
Person p = jo.ToObject<Person>();
p.ProfilePicture = (string)jo.SelectToken("picture.data.url");</code>
登录后复制

如果您需要更高级的解决方案,您可以实现自定义 JsonConverter,使 JsonProperty 属性能够按预期方式工作。此转换器将使用反射根据属性中指定的路径填充所有属性。

例如,考虑以下 JSON 数据:

<code class="language-json">{
  "name": "Joe Shmoe",
  "age": 26,
  "picture": {
    "id": 123456,
    "data": {
      "type": "jpg",
      "url": "http://www.someplace.com/mypicture.jpg"
    }
  },
  "favorites": {
    "movie": {
      "title": "The Godfather",
      "starring": "Marlon Brando",
      "year": 1972
    },
    "color": "purple"
  }
}</code>
登录后复制

要反序列化 JSON 并将子属性映射到类中的简单属性,可以使用以下自定义转换器:

<code class="language-csharp">[JsonConverter(typeof(JsonPathConverter))]
class Person
{
    [JsonProperty("name")]
    public string Name { get; set; }

    [JsonProperty("age")]
    public int Age { get; set; }

    [JsonProperty("picture.data.url")]
    public string ProfilePicture { get; set; }

    [JsonProperty("favorites.movie")]
    public Movie FavoriteMovie { get; set; }

    [JsonProperty("favorites.color")]
    public string FavoriteColor { get; set; }
}</code>
登录后复制

有了自定义转换器,您可以像往常一样反序列化 JSON:

<code class="language-csharp">Person p = JsonConvert.DeserializeObject<Person>(json);</code>
登录后复制

以上是如何在 C# 中将嵌套 JSON 属性映射到类属性?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板