所以我有一个 JSON
字符串,我只想读取一个特定值。如何从下面的字符串中选择“请阅读我!
”?
var readString = /*Read me please!*/
JSON 字符串:
"{\"aString\":\"Read me please!\"}"
为了更好地理解,我该如何在这里做同样的事情? (只是“请读我!
”):
"{\"Result\":
{
\"aString\":\"Read me please!\",
\"anotherString\":\"Dont read me!\"
}
}"
如果两种选择都有不同的解决方案,我想都知道。
PS:我不想将值保存到对象/类等中。只是临时在 var readString
中。
最佳答案
你可以编写一个模型:
public class MyModel
{
public string AString { get; set; }
}
然后使用 JSON 序列化器,例如 Json.NET :
string readString = "{\"aString\":\"Read me please!\"}";
MyModel model = JsonConvert.DeserializeObject<MyModel>(readString);
Console.WriteLine(model.AString);
如果您不想使用第三方解决方案,您可以使用内置的 JavaScriptSerializer
类:
string readString = "{\"aString\":\"Read me please!\"}";
MyModel model = new JavaScriptSerializer().Deserialize<MyModel>(readString);
Console.WriteLine(model.AString);
现在假设您想要处理第二个 JSON 字符串,您可以简单地调整您的模型:
public class Wrapper
{
public MyModel Result { get; set; }
}
public class MyModel
{
public string AString { get; set; }
public string AnotherString { get; set; }
}
然后反序列化到这个包装类:
string readString = ... the JSON string in your second example ...;
Wrapper wrapper = JsonConvert.DeserializeObject<Wrapper>(readString);
Console.WriteLine(wrapper.Result.AString);
Console.WriteLine(wrapper.Result.AnotherString);
<小时/>
更新:
如果您不想反序列化为模型,您可以直接执行以下操作:
string readString = "{\"aString\":\"Read me please!\"}";
var res = (JObject)JsonConvert.DeserializeObject(readString);
Console.WriteLine(res.Value<string>("aString"));
或使用内置的 JavaScriptSerializer
类:
string readString = "{\"aString\":\"Read me please!\"}";
var serializer = new JavaScriptSerializer();
var res = (IDictionary<string, object>)serializer.DeserializeObject(readString);
Console.WriteLine(res["aString"]);
关于c# - C# 中从 JSON 读取特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41808673/