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();
   });