gpt4 book ai didi

c# - 使用 JSON.net 将 JSON 解析为匿名对象[]

转载 作者:可可西里 更新时间:2023-11-01 07:44:04 24 4
gpt4 key购买 nike

我有一个 json 字符串,我想将其解析为一个对象[]:

{ "Thing":"Thing","That":{"Item1":15,"Item2":"Moo","Item3":{"Count":27,"Type":"Frog"}}}

生成的匿名对象数组需要包含原始 json 对象的每个属性。我的问题是 JsonConvert.DeserializeObject 返回一种类型的 JContainer 或 JObject。我无法确定返回普通 C# 对象的方法。

这是我之前一系列尝试的非功能代码。我不必使用 JSON.net,但我希望尽可能确保与生成 json 的代码兼容。

JObject deserialized = JsonConvert.DeserializeObject<JObject>(dataString);
object[] data =
deserialized.Children().Where(x => x as JProperty != null).Select(x => x.Value<Object>()).ToArray();

更新

我正在使用生成的对象数组通过反射调用方法。解析的 json 对象的类型在运行时是未知的。问题的症结在于 JObject 或 JContainer 对象类型与被调用方法的签名不匹配。 Dynamic 也有同样的副作用。方法是这样调用的:

Type _executionType = typeof(CommandExecutionDummy);
CommandExecutionDummy provider = new CommandExecutionDummy();
var method = _executionType.GetMethod(model.Command,
BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public | BindingFlags.Static);
if (method == null)
throw new InvalidCommandException(String.Format("Invalid Command - A command with a name of {0} could not be found", model.Command));
return method.Invoke(provider, model.CommandData);

最佳答案

您可以通过示例反序列化,使用这样的匿名类型:

string jsonString = "{name:\"me\",lastname:\"mylastname\"}";
var typeExample = new { name = "", lastname = "",data=new int[]{1,2,3} };
var result=JsonConvert.DeserializeAnonymousType(jsonString,typeExample);
int data1=result.data.Where(x => 1);

Json.Net 中的其他方式是使用这样的动态对象:

dynamic result2=JObject.Parse(jsonString);

关于c# - 使用 JSON.net 将 JSON 解析为匿名对象[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19918049/

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