这是我的目标,我想从源中检索JSON数据,反序列化为对象,根据值过滤掉对象,最后将其序列化为JSON字符串格式。这是(一个例子)我对JSON数据的看法:
[
{
"property":"prop1",
"status" : {
status1: "A",
status2: -1,
status3: "Success",
},
"offlist":[
{
"description":"description blah",
"type":"F",
"values":{
"value1":30.0,
"value2":0.0
}
},
{
"description":"description blah",
"type":"F",
"values":{
"value1":30.0,
"value2":0.0
}
}
]
},
{
"property":"prop2",
"status" : {
status1: "A",
status2: -1,
status3: "Success",
},
"offlist":[
{
"description":"description blah",
"type":"Q",
"values":{
"value1":30.0,
"value2":0.0
}
}
]
}
]
这是我的课程:
public class offerModel {
public List<offlist> offlist { get; set; }
public status statuses { get; set; }
public string property{ get; set; }
}
public class offlist{
public string description{ get; set; }
public string type{ get; set; }
public values values { get; set; }
}
public class values{
public double value1 { get; set; }
public double value2{ get; set; }
}
public class statuses {
public string status1 { get; set; }
public double status2 { get; set; }
public string status3 { get; set; }
}
public class RootObj {
public List<offerModel> offModels { get; set; }
}
尝试反序列化为对象时,我得到一个包含5个对象的List(这是预期的),但所有这些对象都为null。见下文:
var obj = JsonConvert.DeserializeObject<List<RootObj>>(jsonstring);
然后我要删除所有“offlist”对象,其中'type'值等于'F'。
删除后,我想重新使用JSON字符串格式,我相信它与下面非常类似,我只是无法以正确的方式反序列化。
var json = JsonConvert.SerializeObject(obj);
如果我遗漏任何细节,请告诉我......
答案 0 :(得分:1)
将嵌套的 JSON 反序列化为 Class。不是基于字典,但很有用。
步骤 01:打开链接 https://jsonformatter.org/json-parser
步骤 02:复制您的 json 文件或内容。
步骤 03:打开上面的链接。复制内容并粘贴到左侧,然后单击“JSON 解析器”按钮。
步骤 04:点击下载按钮。下载 jsonformatter.txt 文件。成功下载文件为 jsonformatter.txt。
第 05 步:复制第 02 步的内容并打开网址 https://json2csharp.com/。复制内容并粘贴到左侧,然后点击“转换”按钮。
步骤 06:在脚本中。
(A) 创建 myRootClass.cs 文件并将内容复制并粘贴到您的文件中。[[System.Serializable] 它用于统一 3d 软件 c# 脚本]
[System.Serializable]
public class myRootClass
{
// Root myDeserializedClass = JsonConvert.DeserializeObject<Root>(myJsonResponse);
[System.Serializable]
public class Status
{
public string status1 { get; set; }
public int status2 { get; set; }
public string status3 { get; set; }
}
[System.Serializable]
public class Values
{
public double value1 { get; set; }
public double value2 { get; set; }
}
[System.Serializable]
public class Offlist
{
public string description { get; set; }
public string type { get; set; }
public Values values { get; set; }
}
public class Root
{
public string property { get; set; }
public Status status { get; set; }
public List<Offlist> offlist { get; set; }
}
}
(B) 读取 jsonformatter.txt 文件。
// Read entire text file content in one string
string textFilePath = "C:/Users/XXX/Downloads/jsonformatter.txt";//change path
string jsontext = System.IO.File.ReadAllText(textFilePath);
Debug.Log("Read Json"+jsontext);// used Console.Writeline
(C) 将字符串转换为 C# 并显示数据。
Root myDeserializedClass = JsonConvert.DeserializeObject<Root>(jsontext);
Debug.Log("myDeserializedClass.property:- "+myDeserializedClass.property); //used Console.Writeline
var offlists= myDeserializedClass.offlist; // used foreach and view data
答案 1 :(得分:0)
将序列化更改为JsonConvert.DeserializeObject<List<offerModel>>(data)
并将offerModel
类属性statuses
修复为public statuses status { get; set; }
,以使您的示例可反序列化
如果你想保留一个根对象,你可以做下一步:
public class RootObj : List<offerModel>{}
JsonConvert.DeserializeObject<RootObj>(data)