gpt4 book ai didi

c# - 如何用奇怪的数组解析这个 JSON

转载 作者:行者123 更新时间:2023-11-30 21:48:09 31 4
gpt4 key购买 nike

我正在使用 Newtonsoft 的 JSON 解析器来解析来自外部系统的结果(外部系统不是 .net,所以他们使用不同的序列化库)。

我觉得 JSON 字符串有点滑稽。端点用于/clients,但它不返回客户端资源数组,而是返回包含数组的命名对象。像这样:

{"Client": [{"ClientId":"TheId"}]}

如果我尝试将其反序列化为客户端数组,它会失败并出现异常:

Client[] clients = serializer.Deserialize<Client[]>(aReaderWithTheJson)

异常:

Cannot deserialize the current JSON object ... To fix this error either change the JSON to a JSON array (e.g. [1,2,3]) or change the deserialized type so that it is a normal .NET type

我已经通过为我的目标对象创建一个人工包装类来成功反序列化,如下所示:

class ClientArray 
{
public Client[] Client {get;set;}
}

// then deserialize:
var clientWrapper = serializer.Deserialize<ClientArray>(theReader);
var client = clientWrapper.Client[0];

但我的问题是:虽然这有效,但我不知道 JSON.net 是否有一些我应该研究的特性(某种序列化助手,或者我可以用来装饰我的 DTO 的属性?) .

最佳答案

你是对的。您拥有的 JSON 是格式正确的 JSON。没什么好笑的。

它返回一组打包/包装在根对象中的客户端资源。

{"Client": [{"ClientId":"TheId"}]}

解决这个...

public class Client
{
public string ClientId { get; set; }
}

public class RootObject // Same as you wrapper
{
public IList<Client> Client { get; set; }
}

当放置在类似 http://jsonutils.com 的 JSON 反序列化器中时

就像您最终通过使用 Wrapper 对象发现的那样。

var clientWrapper = serializer.Deserialize<RootObject>(json);
var clients = clientWrapper.Client;

这看起来与您在问题中所拥有的完全一样。如果这就是外部系统提供数据的方式,那么您真的没有什么可做的。

关于c# - 如何用奇怪的数组解析这个 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37903501/

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