有没有办法将JSON内容反序列化为C#4动态类型?为了使用DataContractJsonSerializer,跳过创建一堆类会很不错.
是否可以使用json.net从json反序列化返回动态对象?我想做这样的事情:
dynamic jsonResponse = JsonConvert.Deserialize(json);
Console.WriteLine(jsonResponse.message);
Run Code Online (Sandbox Code Playgroud) 在C#中,我已经使用这样的代码成功地将匿名对象序列化为JSON ...
var obj = new { Amount = 108, Message = "Hello" };
JavaScriptSerializer serializer = new JavaScriptSerializer();
String output = serializer.Serialize(obj);
Run Code Online (Sandbox Code Playgroud)
但是,我希望以后能够将JSON字符串反序列化为匿名对象.像这样......
var obj2 = serializer.Deserialize(output, object);
Run Code Online (Sandbox Code Playgroud)
但是serializer.Deserialize()方法需要第二个参数,它是要反序列化的对象类型.
我试过这个......
var obj2 = serializer.Deserialize(output, obj.GetType());
Run Code Online (Sandbox Code Playgroud)
但这会产生错误:
没有为'<> f__AnonymousType0`2 [[System.Int32,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089],[System.String,mscorlib,Version = 4.0.0.0,Culture]的类型定义无参数构造函数=中立,PublicKeyToken = b77a5c561934e089]]'.
我不确定这个错误意味着什么.
我有一个json如下:
"[{"a":"b","c":"d"},{"a":"e","c":"f"},{"a":"g","c":"h"}]"
Run Code Online (Sandbox Code Playgroud)
现在我想把它变成匿名类型"foo"的对象列表
var foo=new { a=string.empty , c=string.empty };
Run Code Online (Sandbox Code Playgroud)
代码是:
ServiceStackJsonSerializer Jserializer = new ServiceStackJsonSerializer();
dynamic foos = Jserializer.Deserialize<List<foo.GetType()>>(jsonString);
Run Code Online (Sandbox Code Playgroud)
但没有工作.
更新:
更换ServiceStack用JavascriptSerializer和传球dictionary[]来解决,而不需要将问题anonymous类型
JavaScriptSerializer jSerializer = new JavaScriptSerializer();
var Foos = jSerializer.Deserialize<Dictionary<string, object>[]>(jsonString);
Run Code Online (Sandbox Code Playgroud)