反序列化序列化的JSON文件

时间:2019-08-30 09:07:04

标签: c# json deserialization

我有一个已通过API序列化的JSON文件,在该文件中,我需要对其进行反序列化以使用其在代码中生成的数据。问题是我遇到了“异常未处理”错误,在该错误中,我试图了解该错误的解决方案,但在此问题上,我有几天没有见识。

我已尽力将我的问题与其他线程联系起来,但是迷路了几天。通过设置带有属性的{get {return}},我确实获得了某种形式的sprint完成,但是由于序列化时代码的设置,我无法做到这一点。相反,我尝试将输出的文件放在一个简单的位置,并尝试根据文件位置对其进行脱盐处理。

ImageModeration image1 = JsonConvert.DeserializeObject<ImageModeration>(File.ReadAllText(@"C:\ModerationOutput.json"));

// deserialize JSON directly from a file
using (StreamReader file = File.OpenText(@"C:\ModerationOutput.json"))
{
    JsonSerializer serializer = new JsonSerializer();
    ImageModeration image2 = (ImageModeration)serializer.Deserialize(file, typeof(ImageModeration));
}

这是我的json文件

[   {     “ ImageUrl”:“ URL”,     “ ImageModeration”:{       “ CacheID”:“ 396a972f-79ae-4b31-a54c-0ba3314318fa_637026883058218816”,       “结果”:false,       “ TrackingId”:“ UKS_ibiza_464a60be-f57d-4ee1-aa37-13d04f151fdd_ContentModerator.F0_4ae15371-36c9-4cb2-8e21-83381a29432c”,       “ AdultClassificationScore”:0.0048455675132572651,       “ IsImageAdultClassified”:否,       “ RacyClassificationScore”:0.011258091777563095,       “ IsImageRacyClassified”:否,       “ AdvancedInfo”:[         {           “密钥”:“ ImageDownloadTimeInMs”,           “值”:“ 37”         },         {           “键”:“ ImageSizeInBytes”,           “值”:“ 34854”         }       ],       “状态”: {         “代码”:3000,         “描述”:“确定”,         “异常”:null       }     },     “ TextDetection”:null,     “ FaceDetection”:null   } ]

此错误来自代码的第一行。

  

Newtonsoft.Json.JsonSerializationException:'无法反序列化   当前JSON数组(例如[1,2,3])转换为type   'convertingJSON.Program + ImageModeration',因为该类型需要一个   JSON对象(例如{“ name”:“ value”})以正确反序列化。修理   此错误将JSON更改为JSON对象(例如   {“ name”:“ value”})或将反序列化类型更改为数组或   实现集合接口的类型(例如ICollection,IList)   例如可以从JSON数组反序列化的List。   还可以将JsonArrayAttribute添加到类型中以强制将其   从JSON数组反序列化。路径”,第1行,位置1。'

2 个答案:

答案 0 :(得分:1)

使用this网站将您的JSON转换为C#对象,然后反序列化为它。 根据该错误,您似乎可能缺少一个属性,即该对象与JSON不对应

答案 1 :(得分:0)

特定于您发布的JSON字符串,可以参考以下代码片段将字符串反序列化为相应的组件。我使用的是Newtonsoft JSON库,该库是.NET的高性能JSON框架。一个有效的示例可以在以下网址找到:https://dotnetfiddle.net/RmXNHM

using System;
using Newtonsoft.Json;
using System.Collections.Generic;


public class Program
{
    public static void Main()
    {
        string json=@"[{'ImageUrl':'URL','ImageModeration':{'CacheID':'396a972f-79ae-4b31-a54c-0ba3314318fa_637026883058218816','Result':false,'TrackingId':'UKS_ibiza_464a60be-f57d-4ee1-aa37-13d04f151fdd_ContentModerator.F0_4ae15371-36c9-4cb2-8e21-83381a29432c','AdultClassificationScore':0.004845567513257265,'IsImageAdultClassified':false,'RacyClassificationScore':0.011258091777563095,'IsImageRacyClassified':false,'AdvancedInfo':[{'Key':'ImageDownloadTimeInMs','Value':'37'},{'Key':'ImageSizeInBytes','Value':'34854'}],'Status':{'Code':3000,'Description':'OK','Exception':null}},'TextDetection':null,'FaceDetection':null}]";
        var Sresponse = JsonConvert.DeserializeObject<List<RootObject>>(json);

        foreach(var value1 in Sresponse)
        {
          Console.WriteLine(value1.ImageUrl);
          Console.WriteLine(value1.ImageModeration.CacheID);    
        }
    }
}

public class AdvancedInfo
{
    public string Key { get; set; }
    public string Value { get; set; }
}

public class Status
{
    public int Code { get; set; }
    public string Description { get; set; }
    public object Exception { get; set; }
}

public class ImageModeration
{
    public string CacheID { get; set; }
    public bool Result { get; set; }
    public string TrackingId { get; set; }
    public double AdultClassificationScore { get; set; }
    public bool IsImageAdultClassified { get; set; }
    public double RacyClassificationScore { get; set; }
    public bool IsImageRacyClassified { get; set; }
    public List<AdvancedInfo> AdvancedInfo { get; set; }
    public Status Status { get; set; }
}

public class RootObject
{
    public string ImageUrl { get; set; }
    public ImageModeration ImageModeration { get; set; }
    public object TextDetection { get; set; }
    public object FaceDetection { get; set; }
}

输出:

URL
396a972f-79ae-4b31-a54c-0ba3314318fa_637026883058218816