首页 > 后端开发 > C++ > 如何将嵌套的JSON属性映射到简单的C#属性?

如何将嵌套的JSON属性映射到简单的C#属性?

Patricia Arquette
发布: 2025-01-24 22:57:11
原创
570 人浏览过

How to Map Nested JSON Properties to Simple C# Properties?

将 JSON 子属性映射到 C# 对象中的简单属性

简介

在 Newtonsoft.Json 中创建自定义反序列化行为可以通过自定义属性和转换器来实现。这允许您将 JSON 对象中的子属性映射到 C# 类中的简单属性,即使它们没有对应的对象。

使用辅助方法

如果您只需要一个额外的属性,一个简单的方法是将您的 JSON 解析为 JObject,使用 ToObject() 填充您的类,然后使用 SelectToken() 来提取额外的属性。例如:

<code class="language-csharp">string json = @"
{
    ""name"" : ""Joe Shmoe"",
    ""age"" : 26,
    ""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

对于更复杂的解决方案,您可以创建一个自定义 JsonConverter,它利用上述技术来处理所有用 JsonProperty 属性标记的属性。JsonConverter 可以使用反射来查找属性,将它们映射到正确的 JSON 路径,并相应地填充属性。

<code class="language-csharp">class JsonPathConverter : JsonConverter
{
    // ReadJson 实现在此处...
}</code>
登录后复制

关联自定义转换器

使用 [JsonConverter] 属性将自定义转换器与目标类关联。然后,您可以将 [JsonProperty] 属性应用于所需的属性,并将 JSON 路径指定为属性名称。

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

    [JsonProperty("picture.data.url")]
    public string ProfilePicture { get; set; }
}</code>
登录后复制

使用这些属性后,您可以像往常一样反序列化 JSON,映射将自动发生。

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

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