gpt4 book ai didi

c# - 在 WinRT 中使用动态数据类型反序列化 JSON

转载 作者:太空宇宙 更新时间:2023-11-03 21:53:05 24 4
gpt4 key购买 nike

我最近尝试使用具有动态数据类型的 JSON.Net API 反序列化 JSON 内容。

我非常努力地搜索了论坛,发现在 WinRT 中确实可以这样做。

示例 JSON 可以是:

string json = "{\"message\":\"Sample Message\"}"

我使用了以下格式:

dynamic result = JsonConvert.DeserializeObject<dynamic>(json);

它成功地将内容反序列化为结果。但是当我尝试使用如下语法访问它时:

string message = result.message;

它会导致错误:

'object' does not contain a definition for 'message' and no extension method 'message' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)

我尝试了整个互联网上的许多 json 样本,但错误仍然存​​在。说实话,几个小时前我试过了,它确实有效!但是这次我找不到我缺少的东西。

PS:我需要使用 dynamic 只是因为我的实际 Json 包含动态字段名称。一旦它像:

{"New York" : "Its in United States"}

有时它是这样的:

{"London" : "Its in United Kingdom"}

(尽管是废话!:P)我猜 json2csharp 类方法在这里不起作用,如果有一些辅助且更有效的方法。请指导我。我试图解析的真实 Json 非常复杂。如果需要发布,我会发布。

最佳答案

我在我的个人项目中使用 JSON.NET,但使用如下方括号语法反序列化:

Id = jsonResult["object_id"].ToObject<int>(),

要实际获取 JSON 对象,我这样做:

var response = await client.GetStringAsync(parameters);
var jsonResult = JToken.Parse(response)["results"].Children();

在对使用 JSON.NET 的不同方式进行了大量研究后,我采用了这种方法。阅读这篇文章后,我认真考虑过采用动态路线:http://www.west-wind.com/weblog/posts/2012/Aug/30/Using-JSONNET-for-dynamic-JSON-parsing

然而,最后我决定反对动态对象,因为当我用方括号语法填充我的普通对象时,我会立即返回到强类型环境,智能感知将开始捕获我可能犯的任何错误。我将其与 LINQ 查询相结合,并在相对较少的行中填充了一组相当复杂的对象。

对我来说,动态对象是反序列化过程中的又一个弱类型步骤,我希望尽可能避免。

关于c# - 在 WinRT 中使用动态数据类型反序列化 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13541966/

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