【发布时间】:2013-08-19 20:55:05
【问题描述】:
只是尝试从 JSON 创建一个匿名类型,而无需提前了解参数,并完全解释它们(可能带有提示)。即该值“看起来”像一个 int、字符串或日期。
到目前为止,我所知道的唯一方法是创建一个您预先知道的匿名类型。请参阅下面的 .DeserializeAnonymousType(...) 方法。
还有谁能做得比这更好?谢谢。
var jsonString = "{\"user_id\": 1, \"user_type\": \"moderator\", \"name\": \"Fred\"}";
JToken root = JObject.Parse(jsonString);
var anonTemplate = new{user_id=0, user_type="", name="" };
var a = JsonConvert.DeserializeAnonymousType(root.ToString(), anonTemplate);
var b = JsonConvert.DeserializeObject<Object>(root.ToString()); // actually turns into a JsonObject which is something differet.
更新
我下载了 dynamicduck 并正在使用它。布赖恩的这个奇怪的动态“包装器”想法能以我需要的方式(可序列化等)吗?
http://weblogs.asp.net/britchie/archive/2010/08/05/json-net-dynamic-extensions.aspx
http://weblogs.asp.net/britchie/archive/2010/08/03/dynamicduck-duck-typing-in-a-dynamic-world.aspx
【问题讨论】:
-
如果是 .NET 4,我假设您应该能够反序列化为
dynamic对象,然后显式访问所需的属性 -
如果您不知道该对象具有或预期具有哪些参数,您打算如何使用它?
-
@sll:有例子吗?不反对动态类型。我有时会使用它们。在这种情况下,我的下一个问题是如何将动态类型转换为匿名类型。我对任一路径都很满意,因为性能不是问题,但是,在这种情况下,我确实需要一个匿名类型(现有库)。
-
@KallDrexx:还有其他动态 DSL 的东西。
-
drowningintechnicaldebt.com/ShawnWeisfeld/archive/2010/08/22/… article 概述了如何返回 C# 动态,尽管不是使用 Json.net