【问题标题】:RestSharp: Deserialize json stringRestSharp:反序列化 json 字符串
【发布时间】:2015-12-28 20:47:07
【问题描述】:

我一直在尝试反序列化 return response.Content 字符串但徒劳无功。 WebApi 操作返回修改后的 modelState 以及其他自定义错误。

在 MVC 方面,我尝试了以下方法均无效:

JsonDeserializer deserial = new JsonDeserializer();
  var json = deserial.Deserialize<dynamic>(response);

    var json = JsonConvert.DeserializeObject<WebApiReturnModel>(response.Content);

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

        public ModelStateDictionary ModelState { get; set; }
    }

response.Content 返回的示例:

{
    "Message":"The request is invalid.",
    "ModelState":{
        "": ["Name Something is already taken.","Email 'ab@something.com' is already taken."]
            }
}

如何让它工作?

【问题讨论】:

  • ModelStateDictionary是如何设计的?
  • @Amit 这是默认的 .Net 实现

标签: c# json asp.net-mvc asp.net-web-api restsharp


【解决方案1】:

我尝试使用 dynamic 方法,对我来说这很有效:

var input = @"{
                ""Message"":""The request is invalid."",
                ""ModelState"":{
                            """": [""Name Something is already taken."",""Email 'ab@something.com' is already taken.""]
                }
            }";

// This uses JSON.Net, as your second snippet of code.
var json = JsonConvert.DeserializeObject<dynamic>(input);

// This will get: The request is invalid.
var message = json["Message"].Value;

foreach (var m in json["ModelState"][""])
{
    // This will get the messages in the ModelState.
    var errorMessage = m.Value;
}

如果不知道ModelState 中的键名,可以使用嵌套循环:

foreach (var m in json["ModelState"])
{
    foreach (var detail in m.Value)
    {
        // This will get the messages in the ModelState.
        var errorMessage = detail.Value;
    }
}

【讨论】:

  • json["ModelState"][""] 的唯一问题是在使用之前必须知道密钥。必须有更好的方法。
猜你喜欢
  • 2013-05-07
  • 1970-01-01
  • 1970-01-01
  • 2022-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多