从 JSON 字符串中获取特定字段而无需在 C# 中反序列化

S.L*_*kas 6 c# json

我目前有一个 REST 应用程序,它返回一个类似于以下内容的 JSON 字符串:

[{error: "Account with that email exists"}]

对于什么时候抛出错误。我不想将它反序列化为自定义的“错误”对象,因为它看起来有点浪费和毫无意义。有没有一种简单的方法可以从 JSON 字符串中提取特定字段,而无需创建自定义类来反映它。

谢谢

Yet*_*der 9

如果您不想创建自定义类,您有几个选择,您可以反序列化为动态:

dynamic tmp = JsonConvert.DeserializeObject(yourString);
string error = (string)tmp.error;
Run Code Online (Sandbox Code Playgroud)

或反序列化为字典:

var dic = JsonConvert.DeserializeObject<Dictionary<string, string>>();
string error = dic["error"];
Run Code Online (Sandbox Code Playgroud)

  • 为什么你认为这是动态滥用?避免创建一个类只是为了读取错误消息。 (2认同)

Ale*_*rov 6

不需要第三方库。使用原生JavaScriptSerializer

string input = "[{error: \"Account with that email exists\"}]";
var jss = new JavaScriptSerializer();

var array = jss.Deserialize<object[]>(input);
var dict = array[0] as Dictionary<string, object>;
Console.WriteLine(dict["error"]);

// More short with dynamic
dynamic d = jss.DeserializeObject(input);
Console.WriteLine(d[0]["error"]);
Run Code Online (Sandbox Code Playgroud)