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