我可以在j#中将json反序列化为匿名类型吗?我从数据库中读取了一个很长的json。我只想要那个json的一个属性。我有两个选择:为该json创建一个接口并反序列化到该接口。(因为我只需要一个属性,这是不是太过分了?)b.找到我需要的子字符串(正则表达式?)哪个是首选?更新:我正在使用.net3.5为什么不使用JSON.NET的“LINQtoJSON”方法(JObject等)进行反序列化,而只通过名称询问您想要的值?这是足够动态的,因此您不需要为所有内容创建接口,但它比使用正则表达式要安全得多。JObjectjson=JObject.Parse(文本);JToken值=json["foo"]["bar"];(我相信JSON.NET在.NET4中也支持dynamic,但这里没有具体需要使用它。)正则表达式肯定不讨论。忘记它,就好像它从未存在过一样。创建和使用强类型是一件好事,可能就像我正在做的那样。但如果你愿意,你也可以使用动态:classProgram{staticvoidMain(){varjson="{'foo':{'bar':'barvalue','baz':[1,2,3]}}";varserializer=newJavaScriptSerializer();动态值=serializer.DeserializeObject(json);Console.WriteLine(值["foo"]["baz"][1]);}}在控制台打印2。在.NET4上:您可以按照此处所述使用C#4.0的动态功能来执行您想要的操作,而无需使用正则表达式(您不应该为这样的事情使用正则表达式!):http://www.drowingintechnicaldebt.com/ShawnWeisfeld/Archive/2010/08/Chapter22/use-c-4.0anddynamic-vs-parsing-json.aspx唯一的缺点是你不能保证对象的确切结构是什么.好处是,不是通过yourDynamicObject['blah']访问成员,更多的鸭子类型是yourDynamicObject.blah在.NET3.5上:您可以使用Json.NET:http://json.codeplex.com/查找子字符串很危险优化。是否值得优化流程(与JSON反序列化相比)并安全地进行此类查找?我们不能回答是,因为这主要取决于上下文。但我会说不,因为它显然是在自找麻烦:即使它现在可以工作,将来当您的对象的结构或内容发生变化时,它也可能会被破坏。旧线程,但这是.NET3.5上的另一种方法:您可以将DeserializeObject返回的对象转换为字典。它类似于使用.NET4.0动态关键字的解决方案:JavaScriptSerializerserializer=newJavaScriptSerializer();Objectobj=serializer.DeserializeObject("{'name':'viniciusfonseca','age':31}");字典ret=(字典)obj;Console.WriteLine(ret["name"].GetType().Name);//输出:StringConsole.WriteLine(ret["name"].ToString());//输出:viniciusfonsecaConsole.WriteLine(ret["age"].GetType().Name);//输出:Int32Console.WriteLine(ret["age"].ToString());//输出:31希望对某人有帮助。问候这取决于。选项A是更严格、更严格、更正式的方式。然而,就像你说的那样,这可能有点矫枉过正。那个json有多胖?从长远来看,选项A留下了未来可能需要使用多个属性的可能性。选项B绝对是非正式和直接的。它今天肯定会起作用,但将来可能需要不同的解决方案。所以你可能想把整个事情包装在一个方法中,对调用客户端隐藏实现。返回仅填充了单个属性的自定义对象。然后,如果将来需要,您可以更改方法以使用全倾斜反序列化。注意:我不认为匿名类型的反序列化在C#3.5中是可能的。你可以这样做:varresult=JsonConvert.DeserializeAnonymousType(json,new{Foo="",Bar=""});这将返回一个包含您定义的字段的动态对象。以上是C#学习教程:CanIdeserializejsonintoananonymoustypeinj#?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
