首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从反序列化的JSON响应中提取字符串值数组

如何从反序列化的JSON响应中提取字符串值数组
EN

Stack Overflow用户
提问于 2019-05-23 10:44:06
回答 2查看 170关注 0票数 1

我对编码非常陌生,下面是我的要求:

  • 我得到一个JSON响应,它有一个值数组(请参阅下面的JSON响应中的读取、更新、删除)
  • 值的数量是动态的,而且每次都会有所不同。
  • 我想知道如何检索它们并放入字符串数组并返回值。

最后的结果应该是

代码语言:javascript
复制
string[] deleteValues = {"MCS:Menu:Admin","MCS:test"}

如果这个问题已经有答案,请指出正确的方向。

提前感谢

==========================================

我能以这种方式得到价值..。

代码语言:javascript
复制
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();

但是由于delete中的值是动态的,所以我需要如何提取它们。

====================

代码片段:

代码语言:javascript
复制
string resp = new StreamReader(request1.GetResponse().GetResponseStream()).ReadToEnd(); // resp is a JSON response from a server
JSON_Deconstructor dc = new JSON_Deconstructor { };
dc.Permitted = new Permitted[1];

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

==================

JSON_Deconstructor类内容:

代码语言:javascript
复制
public class JSON_Deconstructor
{
    public Permitted[] Permitted { get; set; }
    public Denied[] Denied { get; set; }
}

==================

准许类别内容:

代码语言:javascript
复制
public class Permitted
{
    public string[] Read { get; set; }
    public string[] Update { get; set; }
    public string[] Delete { get; set; }
}

=================

JSON答复:

代码语言:javascript
复制
{
"Permitted": [
    {
        "read": [
            "MCS:Menu:Admin"
        ],
        "update": [
            "MCS:test"
        ],
        "delete": [
            "MCS:Menu:Admin",
            "MCS:test"
        ]
    }
]
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-23 11:06:51

首先,将jsonProperty添加到类中,以便能够序列化。

代码语言:javascript
复制
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; }
}

然后,在您的方法中,反序列化您的响应并循环通过结果来构建您的数组。

代码语言:javascript
复制
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();
   });
票数 1
EN

Stack Overflow用户

发布于 2019-05-23 10:53:49

使用Newtonsoft.Json。你可以从NuGet那里得到它。对于Json来说,这是一个非常简单和强大的库。

现在,您应该创建一个类,比如:

代码语言:javascript
复制
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>();
}

然后你就这样用它:

代码语言:javascript
复制
MyResponse result = JsonConvert.DeserializeObject<MyResponse>(jsonAsString);

这应该能行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56273507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档