2

我已经查看了一些线程,但我的目标似乎找不到。
我返回了以下 JSON 字符串:

成功时:

{"success":{"username":"key"}}

出错时:

{"error":{"type":101,"address":"/","description":"link button not pressed"}}

我需要能够将它们反序列化为一个类,并确定我是否有错误或成功消息来继续执行此操作。关于如何实现这一目标的任何想法?

谢谢,

亚当

4

3 回答 3

1

No need to declare a lot of tiny classes. dynamic keyword can help here.

dynamic jObj = JObject.Parse(json);
if (jObj.error!= null)
{
    string error = jObj.error.description.ToString();
}
else
{
    string key = jObj.success.username.ToString();
}
于 2012-11-06T19:59:11.153 回答
1

一种选择是使用http://nuget.org/packages/newtonsoft.json - 您可以创建自己的自定义类以反序列dynamic化或用作目标类型。

var result = JsonConvert.DeserializeObject<Result>(jsonString);

class Result
{
    public SuccessResult success { get; set; }
    public ErrorResult error { get; set; }
}

class SuccessResult
{
    public string username { get; set; }
}

class ErrorResult
{
    public int type { get; set; }
    public string address { get; set; }
    public string description { get; set; }
}

如果您只需要检查是否成功,则可以只检查result.StartsWith("{\"success\":")以避免不必要的解析。但这只有在您保证 JSON 字符串始终与此完全相同(没有额外的空格等)时才应该这样做 - 所以通常只有您自己拥有 JSON 生成时才合适。

于 2012-11-06T19:46:05.893 回答
0

这个答案涵盖了大多数选项,包括滚动您自己的解析器和使用 JSON.Net:

在 C# 中解析 JSON

如果格式如此简单,您也可以只编写一个正则表达式......

于 2012-11-06T19:49:43.863 回答