Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用Newtonsoft.JSON反序列化JSON数组_C#_Json_Deserialization - Fatal编程技术网

C# 如何使用Newtonsoft.JSON反序列化JSON数组

C# 如何使用Newtonsoft.JSON反序列化JSON数组,c#,json,deserialization,C#,Json,Deserialization,嗨,这是我的Json数据,但我不能反序列化它。 我只想检查“状态”值。(第一个对象“状态”0,第二个对象“状态”1) 示例定义: [ { "receiver_tax_id":"1002", "total":"6949,15", "receiver_company_name":"Das Company", "receiver_email":"info@another.com", "status":0 }, {

嗨,这是我的Json数据,但我不能反序列化它。 我只想检查“状态”值。(第一个对象“状态”0,第二个对象“状态”1)

示例定义:

[
   {
      "receiver_tax_id":"1002",
      "total":"6949,15",
      "receiver_company_name":"Das Company",
      "receiver_email":"info@another.com",
      "status":0
   },
   {
      "receiver_tax_id":"1001",
      "total":"39222,49",
      "receiver_company_name":"SAD company",
      "receiver_email":"info@mail.com",
      "status":1
   }
]
反序列化代码:

public class Example 
{
    [JsonProperty("receiver_tax_id")] 
    public string receiver_tax_id { get; set; }
    [JsonProperty("total")] 
    public string total { get; set; }
    [JsonProperty("receiver_company_name")] 
    public string receiver_company_name { get; set; }
    [JsonProperty("receiver_email")] 
    public string receiver_email { get; set; }
    [JsonProperty("status")] 
    public int status { get; set; } 
}
请尝试以下代码:

var des = (Example)JsonConvert.DeserializeObject(responseString, typeof(Example)); 
Console.WriteLine(des.status[0].ToString());
反序列化如下所示:

public class Receiver 
{
   public string receiver_tax_id { get; set;}
   public string total { get; set;}
   public string receiver_company_name { get; set;}
   public int status { get; set;}
}
var result=JsonConvert.DeserializeObject(responseString);
var status=结果[0]。状态;

您正在尝试将数组反序列化为示例对象。请尝试对列表执行此操作:

var result = JsonConvert.DeserializeObject<List<Receiver>>(responseString);
var status = result[0].status;
var des=JsonConvert.DeserializeObject(responseString,typeof(List))作为列表;

如果您只关心检查
状态
,则可以使用.NET()


这样,您甚至不需要
示例

从您的代码和JSON样本来看,问题似乎是您实际上在反序列化一个
列表
,而不是一个
示例

我会做两件事:

  • 让您的类遵循.NET命名约定,因为您已经用适当的
    JsonProperty
    属性作为前缀:

    dynamic deserialized = JObject.Parse(responseString); 
    int status1 = deserialized[0].status; 
    int status2 = deserialized[1].status; 
    //
    // do whatever
    
  • 使用通用
    JsonConvert.DeserializeObject
    重载而不是当前使用的非通用版本反序列化
    列表

    public class Example 
    {
        [JsonProperty("receiver_tax_id")] 
        public string ReceiverTaxId { get; set; }
    
        [JsonProperty("total")] 
        public string Total { get; set; }
    
        [JsonProperty("receiver_company_name")] 
        public string ReceiverCompanyName { get; set; }
    
        [JsonProperty("receiver_email")] 
        public string ReceiverEmail { get; set; }
    
        [JsonProperty("status")] 
        public int Status{ get; set; } 
    }
    
    var des=JsonConvert.DeserializeObject(responseString);
    Console.WriteLine(des[0]。状态);
    

  • 向我们展示尝试反序列化JSON.var des=(示例)JsonConvert.DeserializeObject(responseString,typeof(示例))的代码;Console.WriteLine(des.status[0].ToString());而
    Example
    是如何定义的?[JsonProperty(“receiver_tax_id”)]公共字符串receiver_tax_id{get;set;}[JsonProperty(“total”)。。。。。我为每个变量添加了JsonProperty如果您使用
    [JsonProperty(“receiver\u tax\u id”)]
    您可以根据需要命名您的属性<代码>[JsonProperty(“status”)]public int MyOwnStatus{get;set;}我不知道。谢谢:)应该是JArray.Parse(或JToken.Parse+检查反序列化。如果我们不确定输入上是否有数组,请键入)。如果您遇到此问题,请注意此答案。在发生此错误的对象中,我有一个字符串数组作为字段。这使我无法意识到我真正的问题是,我在顶层得到了一个项目列表,而该对象中的字符串数组很好。
    public class Example 
    {
        [JsonProperty("receiver_tax_id")] 
        public string ReceiverTaxId { get; set; }
    
        [JsonProperty("total")] 
        public string Total { get; set; }
    
        [JsonProperty("receiver_company_name")] 
        public string ReceiverCompanyName { get; set; }
    
        [JsonProperty("receiver_email")] 
        public string ReceiverEmail { get; set; }
    
        [JsonProperty("status")] 
        public int Status{ get; set; } 
    }
    
    var des = JsonConvert.DeserializeObject<List<Example>>(responseString); 
    Console.WriteLine(des[0].Status);