【问题标题】:Extract data from Collection class从 Collection 类中提取数据
【发布时间】:2019-09-27 19:45:58
【问题描述】:

我有一个返回 JSON 响应的 API 调用: JSON 响应:

{
    "Errors":
    [
        {"Message":"The username supplied is invalid or already in use. Please choose a different username."}
    ]
}

我的课程:

public class Error
{
    public string Message { get; set; }
}

public class ErrorCollector
{
    public List<Error> Errors { get; set; }
}

我想做的是只从这个 JSON 响应中提取消息,但是当我尝试提取数据时,我没有得到 Message 的选项,这是我从 JSON 响应中收集数据的代码。

var thisasa3 = JsonConvert.DeserializeObject<JSonClasses.ErrorCollect>(response.Content);
string Responsess = thisasa3.Errors. //<< No opntion for Message

我做错了什么?我也尝试将列表更改为 ILIST,但没有成功。

【问题讨论】:

  • 由于可能有很多错误(出于某种原因将它们放入 JSON 数组中),您想要哪个错误消息?
  • 嗨@Sweeper 现在响应中的错误是我现在只想做的。

标签: c# asp.net json class object


【解决方案1】:

您正在反序列化一个列表,并尝试检索一个对象,以获取您需要获取列表中的第一项的消息。

像这样:

var thisasa3 = JsonConvert.DeserializeObject<JSonClasses.ErrorCollect>(response.Content);
var response = thisasa3.Errors[0].Message;

【讨论】:

  • 嗨@Guilherme Martin 我认为它应该是var response = thisasa3.Errors[0].Message 就像他们的回答中提到的@haldo。
【解决方案2】:

Errors 是一个集合List&lt;Error&gt; Errors。您需要遍历所有错误以获取内部消息。例如:

string Responsess = thisasa3.Errors;
var messages = string.Empty;
foreach (var error in Responsess.Errors)
{
    messages += $"{error.Message} ";
}

或者干脆用string.Join():

// all messages
string messages = string,Join(", ", thisasa3.Errors);

如果你只想要第一个错误,或者只有一个错误:

// first message
string message = thisasa3.Errors?[0].Message;

或者使用System.Linq:

// first message
string message = thisasa3.Errors.FirstOrDefault()?.Message;

【讨论】:

    猜你喜欢
    • 2018-12-12
    • 1970-01-01
    • 2019-04-10
    • 2020-06-21
    • 2020-06-21
    • 1970-01-01
    • 2015-06-12
    • 2015-07-24
    • 1970-01-01
    相关资源
    最近更新 更多