C# 反序列化序列化JSON文件

C# 反序列化序列化JSON文件,c#,json,deserialization,C#,Json,Deserialization,我有一个通过API序列化的JSON文件,在这个文件中,我需要对它进行反序列化,以使用它在代码中生成的数据。问题是我遇到了一个异常未处理的错误,我试图理解错误的解决方案,但是我有几天没有看到这个问题 我已经尽力将我的问题与其他线程联系起来,但已经丢失了几天。通过使用属性设置{get{return}},我确实获得了某种形式的sprint finish,但由于序列化时代码的设置,我无法做到这一点。相反,我尝试将输出的文件放在一个简单的位置,并尝试根据文件位置对其进行淡化 ImageModeration

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

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

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));
}
ImageModerationImage1=JsonConvert.DeserializeObject(File.ReadAllText(@“C:\ModerationOutput.json”);
//直接从文件反序列化JSON
使用(StreamReader file=file.OpenText(@“C:\ModerationOutput.json”))
{
JsonSerializer serializer=新的JsonSerializer();
ImageModeration image2=(ImageModeration)序列化程序。反序列化(文件,typeof(ImageModeration));
}
这是我的json文件

[ { “ImageUrl”:“URL”, “中庸”:{ “CacheID”:“396a972f-79ae-4b31-a54c-0ba3314318fa_637026883058218816”, “结果”:错误, “TrackingId:“UKS_ibiza_464a60be-f57d-4ee1-aa37-13d04f151fdd_内容调节器。F0_4ae15371-36c9-4cb2-8e21-83381a29432c”, “成人分类分数”:0.0048455675132572651, “IsImageAdultClassified”:错误, “racyclassionscore”:0.011258091777563095, “IsImageRacyClassified”:false, “AdvancedInfo”:[ { “键”:“ImageDownloadTimeInMs”, “值”:“37” }, { “键”:“ImageSizeInBytes”, “值”:“34854” } ], “地位”:{ “代码”:3000, “说明”:“确定”, “异常”:空 } }, “TextDetection”:空, “人脸检测”:空 } ]

此错误来自第一行代码

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

使用site将JSON转换为C#对象,然后反序列化到它。
根据错误,您可能丢失了一个属性,即对象与您发布的
JSON
字符串特定的JSON

不对应,您可以参考以下代码片段将字符串反序列化为其各自的组件。可在以下网址找到工作示例:


请提供json或其部分。您的ModerationOutput.json文件有多大?你能发布它的内容吗?你的JSON格式可能不像一个对象
{}
,而是一个值数组
[]
。很高兴能够看到JSON的结构示例。正如nico_c所说,错误消息相当清楚-您试图反序列化到单个对象,而您的JSON似乎包含一个数组(即对象列表)。如果您向我们展示了一个JSON示例,我们可能会为您确认这一点。您的根对象应该是一个集合类型,例如
List
,请参见(如果没有JSON示例,这可能是重复的,但我们无法确定)。具体地说,JSON文件表示一个列表
[…]
,他试图在.NET中反序列化为非集合类型。如果我的JSON文件内容从未更改,这将对我有所帮助,但由于值更改,我需要从文件中读取内容。我仍然在通过前面的答案来得到我的答案。谢谢。@jamesscales代码即使您的JSON文件内容发生了更改,但基本模型结构是相同的,这也可以工作。您可以通过读取文件来尝试此操作。如果模型结构发生变化,您可以使用
动态
属性获取数据。谢谢@Rahul Sharma这解决了我的问题。我将json内容更改为File.ReadAllText(@“C:\ModerationOutput.json”);
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