为了账号安全,请及时绑定邮箱和手机立即绑定

将 JSON 对象图中的对象位置指定为 JsonConvert

将 JSON 对象图中的对象位置指定为 JsonConvert

C#
慕田峪4524236 2022-12-24 10:52:40
在像这样收到的 JSON 中:{ name { first_name: 'Foo', last_name: 'Bar' }, emails: [ {value: 'foo@bar.com' } ]有没有办法告诉 JsonConvert 到,例如:value把数组第一个元素的属性取emails到下面的POCO属性Email中?从JSON中的对象中读取first_name属性放到下面POCO的属性中?nameFirstName我试过做这种路径,但那是行不通的。这有语法吗?public class DaPOCO{  [JsonProperty("name.first_name")]  public FirstName { get; set; }  [JsonProperty("emails[0].value")]  public Email { get; set;} }我知道,如果缺少语法,我可以自己从动态对象中读取属性,如下所示:dynamic data = JsonConvert.DeseralizeObject(json);DaPOCO poco = new DaPOCO{  FirstName = data.name.first_name;  Email = data.emails?.ElementAt(0)?.value;};我只是想知道是否已经有内置的基于属性的语法来执行此操作。
查看完整描述

1 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

根据您发布的序列化 json,下面应该是要反序列化到的正确模型。我相信您了解当前模型与您拥有的 json 不兼容


public class Name

{

    public string first_name { get; set; }

    public string last_name { get; set; }

}


public class Email

{

    public string value { get; set; }

}


public class DaPOCO

{

    public Name name { get; set; }

    public List<Email> emails { get; set; }

}

你可以试试下面的东西


using System;

using System.Linq;

using Newtonsoft.Json.Linq;


public class Program

{

    public static void Main()

    {

        string responseString = @"{ name: { first_name: 'Foo', last_name: 'Bar' }, emails: [ {value: 'foo@bar.com' } ] }";

        JObject jo = JObject.Parse(responseString);

        JObject obj = (jo["emails"] as JArray).FirstOrDefault(x => !string.IsNullOrEmpty(x.Value<string>("value"))) as JObject;

        DaPOCO poco = new DaPOCO

        {

            FirstName = ((jo["name"] as JObject)["first_name"]).ToString(),

            Email = obj["value"].ToString(),

        };


        Console.WriteLine(poco.FirstName + "\t" + poco.Email);

    }

}


public class DaPOCO

{

  public string FirstName { get; set; }

  public string Email { get; set;} 

}


查看完整回答
反对 回复 2022-12-24
  • 1 回答
  • 0 关注
  • 69 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信