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

需要帮助反序列化从 API 返回的 JSON 对象

需要帮助反序列化从 API 返回的 JSON 对象

C#
大话西游666 2021-11-21 11:06:08
我有以下 JSON 输出:{{  "$type": "Asi.Soa.Core.DataContracts.PagedResult`1[[Asi.Soa.Core.DataContracts.GenericEntityData, Asi.Contracts]], Asi.Contracts",  "Items": {    "$type": "System.Collections.Generic.List`1[[Asi.Soa.Core.DataContracts.GenericEntityData, Asi.Contracts]], mscorlib",    "$values": [      {        "$type": "Asi.Soa.Core.DataContracts.GenericEntityData, Asi.Contracts",        "EntityTypeName": "14",        "Properties": {          "$type": "Asi.Soa.Core.DataContracts.GenericPropertyDataCollection, Asi.Contracts",          "$values": [            {              "$type": "Asi.Soa.Core.DataContracts.GenericPropertyData, Asi.Contracts",              "Name": "ResultRow",              "Value": "1"            },            {              "$type": "Asi.Soa.Core.DataContracts.GenericPropertyData, Asi.Contracts",              "Name": "Work Phone",              "Value": "(782) 438-7600"            },            {              "$type": "Asi.Soa.Core.DataContracts.GenericPropertyData, Asi.Contracts",              "Name": "Email",              "Value": "agsaz@rmax.net"            },            {              "$type": "Asi.Soa.Core.DataContracts.GenericPropertyData, Asi.Contracts",              "Name": "Full Name",              "Value": "Agazny"            },            {              "$type": "Asi.Soa.Core.DataContracts.GenericPropertyData, Asi.Contracts",              "Name": "iMISId",              "Value": "eg1"            },            {              "$type": "Asi.Soa.Core.DataContracts.GenericPropertyData, Asi.Contracts",              "Name": "Preferred Phone",              "Value": "780"            },            {              "$type": "Asi.Soa.Core.DataContracts.GenericPropertyData, Asi.Contracts",              "Name": "Organization",              "Value": "Re"            }          ]        }      },     我正在尝试将此响应反序列化为可用的 c# 对象,并将其发布到接受完全不同格式的 JSON 的不同 API。
查看完整描述

1 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

您提供的代码中存在错误。当它是一个对象时,您正试图将其Properties转换为 a JArray。


如果确实需要Properties对象中的数组,请执行以下操作:


JArray arr = (JArray)result["Items"]["$values"][0]["Properties"]["$values"];

否则,如果您正在寻找Properties对象,那么您应该这样做:


JObject obj = (JObject)result["Items"]["$values"][0]["Properties"];

最后,要重建Customer实例列表,您可以将以下逻辑与静态方法一起使用:


var customersJson = (JArray)result["Items"]["$values"];


var customers = new List<Customer>();


foreach (JObject o in customersJson)

{

     var customerJson = (JArray) o["Properties"]["$values"];

     customers.Add(BuildCustomer(customerJson));

}

[...]


private static Customer BuildCustomer(JArray a)

{

    return new Customer

    {

        ResultRow = GetValue(a, "ResultRow"),

        WorkPhone = GetValue(a, "Work Phone"),

        Email = GetValue(a, "Email"),

        FullName = GetValue(a, "Full Name"),

        iMISId = GetValue(a, "iMISId"),

        PreferredPhone = GetValue(a, "Preferred Phone"),

        Organization = GetValue(a, "Organization")

     };

}


private static string GetValue(JArray array, string name)

{

    JToken obj = array.FirstOrDefault(x => (string) x["Name"] == name);


    if (obj == null)

        return string.Empty;


    return (string) obj["Value"];

}


查看完整回答
反对 回复 2021-11-21
  • 1 回答
  • 0 关注
  • 166 浏览

添加回答

举报

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