我可以在j#中将json反序列化为匿名类型吗?

Ela*_*nda 15 c# regex json .net-3.5

我从DB读了一个很长的json.我只想要那个json的一个属性.

我有两个选择:a.为该json创建一个接口并反序列化到该接口.(因为我只需要一个属性,这是一种矫枉过正吗?)b.找到我需要的子串(正则表达式?)

哪个是首选?

更新:我正在使用.net 3.5

Jon*_*eet 26

为什么不使用JSON.NET的"LINQ to JSON"方法(JObject等)反序列化,只是要求名称所需的值?

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

JObject json = JObject.Parse(text);
JToken value = json["foo"]["bar"];
Run Code Online (Sandbox Code Playgroud)

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


Dar*_*rov 18

正则表达式必须完全脱离任何讨论.忘记它,就好像它从未存在过一样.

创建和使用强类型是一件好事,可能就像我要去的那样.

但如果你想,你也可以使用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]);
    }
}
Run Code Online (Sandbox Code Playgroud)

2在控制台上打印.

  • @Elad Benda,没有.那么你可以使用[Json.NET](http://json.codeplex.com/)提供类似的语法. (2认同)