首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我能在c#中将json反序列化为匿名类型吗?

我能在c#中将json反序列化为匿名类型吗?
EN

Stack Overflow用户
提问于 2011-09-20 21:28:35
回答 7查看 9.2K关注 0票数 15

我从数据库中读取了一个很长的json。我只需要该json的一个属性。

我有两个选择: a.为该json创建一个接口,并反序列化到该接口。(我只需要一个属性,这是不是有点过分了?)b.找到我需要的子字符串(regex?)

哪一个是首选的?

更新:我使用的是.net 3.5

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-09-20 21:31:11

为什么不使用JSON.NET的"LINQ to JSON“方法(JObject等)进行反序列化,直接按名称询问所需的值呢?

这是足够动态的,所以你不需要为所有东西创建一个接口,但它比使用正则表达式要少得多。

代码语言:javascript
复制
JObject json = JObject.Parse(text);
JToken value = json["foo"]["bar"];

(我相信JSON.NET在.NET 4中也支持dynamic,但这里没有特别需要使用它。)

票数 27
EN

Stack Overflow用户

发布于 2011-09-20 21:32:36

正则表达式必须完全排除在任何讨论之外。忘了它吧,就像它从来没有存在过一样。

创建和使用强类型是一件好事,也可能是我要走的路。

但是如果你愿意,你也可以使用dynamic

代码语言:javascript
复制
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

票数 18
EN

Stack Overflow用户

发布于 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/

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7485962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档