我有一个Web API,当用户注册失败时会返回以下json:
{
"$id":"1",
"Message":"The request is invalid.",
"ModelState": {
"$id":"2",
"": {
"$id":"3",
"$values": ["Name username@gmail.com is already taken."]
}
}
}
我已经尝试了各种方法在c#中反序列化它,以便向用户显示错误消息而没有任何运气。
以下是我尝试过的事情之一:
对此将提供任何帮助。
提前谢谢
答案 0 :(得分:0)
我希望这可以解决您的问题。我使用vb.net开发并转换为c#。尚未在c#上进行测试,但可在vb.net上使用。
class SurroundingClass
{
private void Button1_Click(object sender, EventArgs e)
{
var FullResponse = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, object>>(WebResult);
Newtonsoft.Json.Linq.JObject lv2 = FullResponse.Item("ModelState");
Newtonsoft.Json.Linq.JObject lv3 = lv2.Item("");
string DisplayResponse = FullResponse.Item("Message") + " " + lv3.Item("$values").First;
MessageBox.Show(DisplayResponse);
}
public string WebResult()
{
return "{'$id':'1','Message':'The request is invalid.','ModelState':{'$id':'2','':{'$id':'3','$values':['Name username@gmail.com is already taken.']}}}";
}
}
答案 1 :(得分:0)
尝试一下:
定义以下类别:
class WebApiResponse
{
public string Message { get; set; }
public Dictionary<string, IList<string>> ModelState { get; set; }
}
然后使用Newtonsoft.Json
库将WebApiResponse
类的实例反序列化json响应:
var jsonFromWebApiResponse = @"{""$id"":""1"",""Message"":""The request is invalid."",""ModelState"":{""$id"":""2"","""":{""$id"":""3"",""$values"":[""Name username@gmail.com is already taken.""]}}}";
var webApiResponse = Newtonsoft.Json.JsonConvert.DeserializeObject<WebApiResponse>(jsonFromWebApiResponse);
foreach (var modelState in webApiResponse.ModelState)
{
foreach (var innerMessage in modelState.Value)
{
// Do something with the messages inside ModelState...
}
}