C# 用C将JSON反序列化到类#

C# 用C将JSON反序列化到类#,c#,json,json-deserialization,C#,Json,Json Deserialization,使用:验证JSON,并使用:json2csharp.com创建C#类 我尝试过使用JSON.Net、RestSharp、.Net DataContractJsonSerializer和JavaScriptSerializer进行反序列化,但都不起作用。该类始终为空,不会引发任何错误 我启用了此处指定的JSON.Net调试,但未引发任何错误 我还尝试了一个简化的Invoice类(无列表),因为我只需要一些基本属性 任何关于我做错了什么的想法都将不胜感激 Invoice ret = JsonConv

使用:验证JSON,并使用:json2csharp.com创建C#类

我尝试过使用JSON.Net、RestSharp、.Net DataContractJsonSerializer和JavaScriptSerializer进行反序列化,但都不起作用。该类始终为空,不会引发任何错误

我启用了此处指定的JSON.Net调试,但未引发任何错误

我还尝试了一个简化的Invoice类(无列表),因为我只需要一些基本属性

任何关于我做错了什么的想法都将不胜感激

Invoice ret = JsonConvert.DeserializeObject<Invoice>(results.Content);

Invoice
不是JSON的顶级类。您应该改用
RootObject

var ret = JsonConvert.DeserializeObject<RootObject>(results.Content);
var ret=JsonConvert.DeserializeObject(results.Content);

要获取
Invoice
请在反序列化后使用
ret.Invoice

使用从生成的类,您应该反序列化到
根对象,而不是
发票

public class RootObject
{
    public int code { get; set; }
    public string message { get; set; }
    public Invoice invoice { get; set; }
}

Invoice ret = JsonConvert.DeserializeObject<RootObject>(results.Content).invoice;
公共类根对象
{
公共整数代码{get;set;}
公共字符串消息{get;set;}
公共发票{get;set;}
}
Invoice ret=JsonConvert.DeserializeObject(results.Content).Invoice;

好的,这是因为您试图反序列化成一个
发票
,但它实际上嵌套在json中的另一个对象中

public class Wrapper
{
     public Invoice invoice { get; set; }
     public int code { get; set; }
     public int message { get; set; }
}
然后做

  Wrapper wrap = JsonConvert.DesrializeObject<Wrapper>(results.Contect);
  if (rwap != null)
      Invoice i = wrap.Invoice;
Wrapper wrap=JsonConvert.DesrializeObject(results.Contect);
如果(rwap!=null)
发票i=包装发票;

谢谢-就这样。我在最初仅使用Json.Net时尝试过这个方法,但它抛出了一个错误:“输入字符串的格式不正确”,我还进行了其他尝试。输入字符串问题是由于其中一个属性为Int且值为decimal。到那时,近视开始了,我看不见森林,看不见树木。。。
  Wrapper wrap = JsonConvert.DesrializeObject<Wrapper>(results.Contect);
  if (rwap != null)
      Invoice i = wrap.Invoice;