我从数据库中读取了一个很长的json。我只需要该json的一个属性。
我有两个选择: a.为该json创建一个接口,并反序列化到该接口。(我只需要一个属性,这是不是有点过分了?)b.找到我需要的子字符串(regex?)
哪一个是首选的?
更新:我使用的是.net 3.5
发布于 2011-09-20 21:31:11
为什么不使用JSON.NET的"LINQ to JSON“方法(JObject
等)进行反序列化,直接按名称询问所需的值呢?
这是足够动态的,所以你不需要为所有东西创建一个接口,但它比使用正则表达式要少得多。
JObject json = JObject.Parse(text);
JToken value = json["foo"]["bar"];
(我相信JSON.NET在.NET 4中也支持dynamic
,但这里没有特别需要使用它。)
发布于 2011-09-20 21:32:36
正则表达式必须完全排除在任何讨论之外。忘了它吧,就像它从来没有存在过一样。
创建和使用强类型是一件好事,也可能是我要走的路。
但是如果你愿意,你也可以使用dynamic
class Program
{
static void Main()
{
var json = "{ 'foo': { 'bar': 'bar value', 'baz': [ 1, 2, 3 ] } }";
var serializer = new JavaScriptSerializer();
dynamic value = serializer.DeserializeObject(json);
Console.WriteLine(value["foo"]["baz"][1]);
}
}
在控制台上打印2
。
发布于 2011-09-20 21:31:52
在.NET 4上:
您可以做一些您想做的事情,但不需要regex (而且您不应该使用regex来做这样的事情!)通过使用这里介绍的C# 4.0的dynamic
特性:http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2010/08/22/using-c-4.0-and-dynamic-to-parse-json.aspx
唯一的缺点是您不能保证对象的确切结构。
更好的方面是,它不是通过yourDynamicObject['blah']
访问成员,而是更像鸭子类型的yourDynamicObject.blah
在.NET 3.5上:
您可以使用Json.NET:http://json.codeplex.com/
https://stackoverflow.com/questions/7485962
复制相似问题