Ste*_*fan 5 .net c# json .net-6.0
我想从 json 字符串中检索单个值。
以前我Newtonsoft这样使用:
var jsonString = @"{ ""MyProp"" : 5 }";
dynamic obj = Newtonsoft.Json.Linq.JObject.Parse(jsonString);
Console.WriteLine(obj["MyProp"].ToString());
Run Code Online (Sandbox Code Playgroud)
但我似乎无法让它在 .NET 6 中工作:
到目前为止我已经尝试过:
var jsonString = @"{ ""MyProp"" : 5 }";
dynamic obj = await System.Text.Json.JsonSerializer.Deserialize<dynamic>(jsonString);
Console.WriteLine(obj.MyProp.ToString());
Run Code Online (Sandbox Code Playgroud)
这会导致此错误:
未处理的异常。Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:“System.Text.Json.JsonElement.this[int]”的最佳重载方法匹配有一些无效参数
阅读此github后,我使用这种方法取得了成功:
NET 6 将包含可用于序列化和反序列化动态数据的 JsonNode 类型。
尝试它的结果是:
using System;
public class Program
{
public static void Main()
{
var jsonString = @"{ ""MyProp"" : 5 }";
//parse it
var myObject = System.Text.Json.JsonDocument.Parse(jsonString);
//retrieve the value
var myProp= myObject.RootElement
.GetProperty("MyProp");
Console.WriteLine(myProp);
}
}
Run Code Online (Sandbox Code Playgroud)
这似乎适用于我的情况。
正如 @robnick 的评论 - 您还可以链接GetProperty以获取数据结构的嵌套属性。
var quote = rootElement.GetProperty("contents")
.GetProperty("quotes")[0]
.GetProperty("quote")
.GetString();
Run Code Online (Sandbox Code Playgroud)