gpt4 book ai didi

c# 使用 newtonsofts JsonConvert DeserializeObject 的通用数据对象

转载 作者:太空狗 更新时间:2023-10-29 23:12:12 28 4
gpt4 key购买 nike

我们正在使用一个外部 API,该 API 使用对象名称“Data”返回其结果。此“数据”可以表示两个不同的对象 - 一个以 json 对象数组的形式存在,另一个以单个 json 对象的形式存在。

我创建了两个单独的 c# 类来表示 JSON 对象数据和一个 c# 根对象类以在使用 JsonConvert.DeserializeObject 转换时捕获 JSON 对象...如何在 C# 中正确表示这些对象请参阅以下结果示例:

下面是 1 个结果 API 调用的示例

{
success:true,
Data:[{id:1,name:"Paul"},{id:2,name:"neville"},{id:3,name:"jason"}]
}

public class User
{
public int id { get; set; }
public string name { get; set; }
}

public class ApiResponse
{
public bool success { get; set; }
public List<User> Data { get; set; }
}

下面是结果 API 调用的示例 2

{
success:true,
Data:{id:1,classSize:30,minAge:25, maxAge:65}
}
public class AgeClass
{
public int id { get; set; }
public int classSize { get; set; }
public int minAge { get; set; }
public int maxAge { get; set; }
}

public class ApiResponse
{
public bool success { get; set; }
public AgeClass Data { get; set; }
}

我将如何构建 ApiResponse 类来满足返回的通用“数据”对象 json 字符串 - 这样我就可以使用通用的“JsonConvert.DeserializeObject(await response.Content.ReadAsStringAsync(), Settings);”

最佳答案

我建议考虑您实际上有 2 种类型的 JSON 响应。您还可以从 ApiResponse 基类继承它们:

using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;

namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
string json1 = @"{
""success"":true,
""Data"":[{id:1, name:""Paul""},{id:2,name:""neville""},{id:3,name:""jason""}]
}";

string json2 = @"{
""success"":true,
""Data"":{id:1,classSize:30,minAge:25, maxAge:65}
}";

string j = json1; //json2;

JObject jo = JObject.Parse(j);

ApiResponse parsed;

if (jo["Data"].Type == JTokenType.Array)
parsed = jo.ToObject<ApiUsersResponse>();
else
parsed = jo.ToObject<ApiAgeResponse>();

Console.ReadKey();
}
}

class User
{
public int id { get; set; }
public string name { get; set; }
}

class AgeClass
{
public int id { get; set; }
public int classSize { get; set; }
public int minAge { get; set; }
public int maxAge { get; set; }
}

class ApiResponse
{
public bool success { get; set; }
}

class ApiUsersResponse : ApiResponse
{
public List<User> Data { get; set; }
}

class ApiAgeResponse : ApiResponse
{
public AgeClass Data { get; set; }
}
}

关于c# 使用 newtonsofts JsonConvert DeserializeObject 的通用数据对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54398917/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com