C# 如何从反序列化JSON响应中提取字符串值数组
我对编码非常陌生,以下是我的要求:C# 如何从反序列化JSON响应中提取字符串值数组,c#,.net,json,json.net,deserialization,C#,.net,Json,Json.net,Deserialization,我对编码非常陌生,以下是我的要求: 我得到一个JSON响应,它有一个值数组(请参阅下面JSON响应中的读取、更新、删除) 值的数量是动态的,每次都有变化 我想知道如何检索它们并将其放入字符串数组并返回值 最终结果应该是这样的 string[] deleteValues = {"MCS:Menu:Admin","MCS:test"} 如果这个问题已经有了答案,请给我指出正确的方向 提前谢谢 ========================================== 我可以通过这种方
- 我得到一个JSON响应,它有一个值数组(请参阅下面JSON响应中的读取、更新、删除)
- 值的数量是动态的,每次都有变化
- 我想知道如何检索它们并将其放入字符串数组并返回值
string[] deleteValues = {"MCS:Menu:Admin","MCS:test"}
如果这个问题已经有了答案,请给我指出正确的方向
提前谢谢
==========================================
我可以通过这种方式获得值
string value1 = new JavaScriptSerializer().Deserialize<JSON_Deconstructor>(resp).Permitted[0].Delete[0].ToString();
string value2 = new JavaScriptSerializer().Deserialize<JSON_Deconstructor>(resp).Permitted[0].Delete[1].ToString();
==================
允许的课程内容:
public class JSON_Deconstructor
{
public Permitted[] Permitted { get; set; }
public Denied[] Denied { get; set; }
}
public class Permitted
{
public string[] Read { get; set; }
public string[] Update { get; set; }
public string[] Delete { get; set; }
}
=================
JSON响应:
{
"Permitted": [
{
"read": [
"MCS:Menu:Admin"
],
"update": [
"MCS:test"
],
"delete": [
"MCS:Menu:Admin",
"MCS:test"
]
}
]
}
使用Newtonsoft.Json。你可以从努吉那里得到它。这是一个非常简单且功能强大的Json库 现在,您应该创建一个类,如:
public class Item
{
public List<string> MCS { get; set; } = new List<string>();
}
public class PermitedItem
{
public Item read {get; set;}
public Item update {get; set;}
public Item delete {get; set;}
}
public class MyResponse
{
public List<PermittedItem> Permitted = new List<PermittedItems>();
}
公共类项目
{
公共列表MCS{get;set;}=new List();
}
公共类许可项
{
公共项读取{get;set;}
公共项更新{get;set;}
公共项删除{get;set;}
}
公共类MyResponse
{
允许的公共列表=新列表();
}
然后你就这样使用它:
MyResponse result = JsonConvert.DeserializeObject<MyResponse>(jsonAsString);
MyResponse result=JsonConvert.DeserializeObject(jsonaString);
这应该是可行的。首先将jsonProperty添加到类中,以便能够序列化
public class Permitted
{
[JsonProperty("read")]
public string[] Read { get; set; }
[JsonProperty("update")]
public string[] Update { get; set; }
[JsonProperty("delete")]
public string[] Delete { get; set; }
}
//Response contains a list of permitted objects in Permitted property
public class PermittedResponse
{
public List<Permitted> Permitted { get; set; }
}
允许使用公共类
{
[JsonProperty(“读取”)]
公共字符串[]读取{get;set;}
[JsonProperty(“更新”)]
公共字符串[]更新{get;set;}
[JsonProperty(“删除”)]
公共字符串[]删除{get;set;}
}
//响应包含允许属性中允许对象的列表
公共类许可证响应
{
允许的公共列表{get;set;}
}
然后在您的方法中反序列化您的响应并循环结果以构建数组
List<string> deletedValues = new List<string>();
List<string> readValues = new List<string>();
List<string> updateValues = new List<string>();
PermittedResponse response = JsonConvert.DeserializeObject<PermittedResponse>(serializedJson);
response.Permitted.ForEach(e =>
{
deletedValues = deletedValues.Concat(e.Delete).ToList();
readValues = readValues.Concat(e.Read).ToList();
updateValues = updateValues.Concat(e.Update ).ToList();
});
List deletedvalue=new List();
List readValues=new List();
List updateValues=新列表();
PermittedResponse response=JsonConvert.DeserializeObject(serializedJson);
response.allowed.ForEach(e=>
{
deletedValues=deletedValues.Concat(e.Delete.ToList();
readValues=readValues.Concat(e.Read.ToList();
updateValues=updateValues.Concat(e.Update.ToList();
});
请添加一个您想做的示例。使用forach()
?您想对这些值做什么?@itdoesntwork我已经编辑了一个示例,演示了我希望最终结果如何将JSON解析为.NET对象,对其进行修改(您可以使用此类对象在代码中做任何您想做的事,删除任何您想做的事,等等),然后将其序列化回JSON,这对您有用吗?通常,您有一个输入和一个输出模型(.NET对象)。将JSON解析为输入模型,将其转换为输出模型,然后将其序列化回JSON。输入和输出模型应该与输入/输出JSON相对应。@Aditia,你能澄清一下什么是no.
吗?当然,JSON.NET是比JavaScriptSerializer更方便的API,但这与如何读取嵌套数组的问题无关。你不必对JSON.NET做任何特殊的操作,因为它自己做每件事。您必须创建正确的类。就这些。为了使用JsonProperty和JsonConvert,我需要添加什么参考资料?谷歌是你的朋友。。在本例中使用这些函数“using System.Collections.Generic;using System.Linq;using Newtonsoft.Json;”我尝试了,但出现了错误“无法将当前Json对象(例如{“name”:“value”})反序列化为类型“System.Collections.Generic.List`1[Testing_MDP.allowed]”,因为该类型需要Json数组(例如[1,2,3])正确反序列化。”更新的答案。。您的响应对象与我提供的映射不同。请再试一次谢谢你,先生!!!它工作顺利。。。然而,为了捕获其他值,我不得不在另外两个地方更改e.Delete。LoL:)但是代码是正确的。
List<string> deletedValues = new List<string>();
List<string> readValues = new List<string>();
List<string> updateValues = new List<string>();
PermittedResponse response = JsonConvert.DeserializeObject<PermittedResponse>(serializedJson);
response.Permitted.ForEach(e =>
{
deletedValues = deletedValues.Concat(e.Delete).ToList();
readValues = readValues.Concat(e.Read).ToList();
updateValues = updateValues.Concat(e.Update ).ToList();
});