linq C#如何查询动态json?

t5zmwmid  于 2022-12-06  发布在  C#
关注(0)|答案(1)|浏览(180)

如果检索的JSON字符串的完整模式未知:

{
    ... other stuff
    "data": [
        {
            "open": 110.05,
            "high": 112.0,
            "low": 110.0,
            "close": 111.78,
            "volume": 21745034.0,
            "symbol": "GOOG",
            "exchange": "XNAS",
            "date": "2022-09-09T00:00:00+0000",
            ... more fields
        },
        ... more data

然后反序列化为动态:

var result = JsonConvert.DeserializeObject<dynamic>(response);

如何查询特定符号?
这不起作用:

var match = result["data"].Where(e => e.Value["symbol"].ToString() == "GOOG").FirstOrDefault();

给出错误:
必须先将lambda表达式强制转换为委托或表达式树类型,才能将其用作动态调度得操作得参数.

vuktfyat

vuktfyat1#

如果使用System.Text.Json,则可以按如下方式使用JsonNode

using System.Linq;
using System.Text.Json.Nodes;


var jsonObject = JsonNode.Parse(response)!.AsObject();

var match = jsonObject["data"]?.AsArray().FirstOrDefault(e => e["symbol"]?.ToString() == "GOOG");

//access properties
string open = match?["open"]?.ToString();

对于Newtonsoft,可以按如下方式使用JObject

using System.Linq;
using Newtonsoft.Json.Linq;

var jsonObject = JObject.Parse(response);

var match = jsonObject["data"].FirstOrDefault(e => e["symbol"]?.ToString() == "GOOG");

//access properties
string open = match?["open"]?.ToString();

相关问题