使用RootObject正确反序列化对象

时间:2017-05-15 23:52:45

标签: c# json.net

我一直试图存储一个json对象,其结构非常嵌套,如下所示:(这是来自api文档的虚拟数据

i1_axis = C.Axis.new_unique_dynamic_axis('1')
i2_axis = C.Axis.new_unique_dynamic_axis('2')
i1 = sequence.input(shape=num_tokens, is_sparse=True, sequence_axis=i1_axis, name='i1')
i2 = sequence.input(shape=num_tokens, is_sparse=True, sequence_axis=i2_axis, name='i2')

我使用json2csharp将其转换为以下对象:

{
 "orders": [
{
  "id": 556729,
  "certificate": {
    "common_name": "digicert.com",
    "dns_names": [
      "digicert.com",
      "www.digicert.com"
    ],
    "valid_till": "2017-08-19",
    "signature_hash": "sha256"
  },
  "status": "issued",
  "date_created": "2014-08-19T18:16:07+00:00",
  "organization": {
    "id": 117483,
    "name": "DigiCert, Inc."
  },
  "validity_years": 3,
  "container": {
    "id": 5,
    "name": "College of Science"
  },
  "product": {
    "name_id": "ssl_plus",
    "name": "SSL Plus",
    "type": "ssl_certificate"
  },
  "price": 293
}, ... (lists more dummy orders, but you get the point, valid json structure with nested objects that hold arrays, etc)

除了包含所有其他对象的类名class Orders { public class Certificate { public int id { get; set; } public string common_name { get; set; } public List<string> dns_names { get; set; } public string valid_till { get; set; } public string signature_hash { get; set; } } public class Organization { public int id { get; set; } public string name { get; set; } } public class Container { public int id { get; set; } public string name { get; set; } } public class Product { public string name_id { get; set; } public string name { get; set; } public string type { get; set; } } public class Order { public int id { get; set; } public Certificate certificate { get; set; } public string status { get; set; } public bool is_renewed { get; set; } public string date_created { get; set; } public Organization organization { get; set; } public int validity_years { get; set; } public Container container { get; set; } public Product product { get; set; } public bool has_duplicates { get; set; } public int price { get; set; } public string product_name_id { get; set; } } public class Page { public int total { get; set; } public int limit { get; set; } public int offset { get; set; } } public class RootObject { public List<Order> orders { get; set; } public Page page { get; set; } } } 之外,所有这些都是生成的。

我的问题似乎来自正确反序列化:我尝试了JSON.net文档中引用的方式,但它没有包含根对象(我假设它是&#39;没有出去就没有工作)。我将列出我尝试在下面完成此操作的一些方法(第一个是直接来自JSON.net文档):我将为我的尝试编号

Orders

这似乎是主要的错误:

  

无法将当前JSON对象(例如{&#34; name&#34;:&#34; value&#34;})反序列化为类型System.Collections.Generic.List`1 [APIinit.Orders + RootObject]&#39;因为该类型需要JSON数组(例如[1,2,3])才能正确反序列化。   要修复此错误,请将JSON更改为JSON数组(例如[1,2,3])或更改反序列化类型,使其成为普通的.NET类型(例如,不是像整数这样的基本类型,而不是类似的集合类型可以从JSON对象反序列化的数组或List。 JsonObjectAttribute也可以添加到类型中以强制它从JSON对象反序列化。   路径&#39;订单&#39;,第1行,第10位。

我想了解如何正确创建此对象。

0 个答案:

没有答案