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



我正在使用newtonsoft的JSON解析器来解析外部系统的结果(外部系统不是.NET,因此他们使用了不同的序列化库)。

JSON字符串对我来说很有趣。端点是为/客户端的,但是它没有返回客户资源数组,而是返回包含数组的命名对象。这样:

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

如果我试图将其验证到客户端数组中,则在例外情况下失败:

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

例外:

无法对当前的JSON对象进行估算...修复此错误要么将JSON更改为JSON数组(例如[1,2,3])或更改 值得称赞的类型,因此它是一种普通的.NET类型

我已经通过为我的目标对象创建人造包装班来成功地进行了挑选:

class ClientArray 
{
  public Client[] Client {get;set;}
}
// then deserialize:
var clientWrapper = serializer.Deserialize<ClientArray>(theReader);
var client = clientWrapper.Client[0];

我的问题:虽然这起作用,但我不知道我应该研究的是JSON.NET的某些功能(某种序列化辅助助手还是我可以使用DTO装饰DTO的属性?)。

您是正确的。您拥有的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避难所中时

就像您最终使用包装器对象发现的那样。

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

这看起来与您的问题完全一样。如果这是外部系统提供数据的方式,那么您实际上没有什么可做的。

相关内容

  • 没有找到相关文章

最新更新