在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]]'.
我不确定这个错误意味着什么.
Vin*_*Vin 32
JSON.Net是一个功能强大的库,可以在.Net中使用JSON
您可以使用DeserializeAnonymousType方法.
更新:Json.Net现在包含在ASP.Net中,但我最近使用的最喜欢的是 JsonFX.它也有很棒的linq支持,请查看.
更新2:我已经从JsonFX转移,目前使用 ServiceStack.Text,速度很快!
i31*_*nGo 26
动态如何,我看到的最快的方式是:
dynamic myObject = JsonConvert.DeserializeObject<dynamic>(output);
decimal Amount = Convert.ToDecimal(myObject.Amount);
string Message = myObject.Message;
Run Code Online (Sandbox Code Playgroud)
注意:您将需要Newtonsoft.json.dll引用
Pet*_*old 14
如何使用DeserializeObject方法,它不需要特定的类型.这也解决了类似的SO问题.该方法反序列化为Dictionary<string, object>包含名称/值对.
更新:澄清执行此操作时出现的错误:
var obj2 = serializer.Deserialize(output, obj.GetType());
Run Code Online (Sandbox Code Playgroud)
给定类型obj,Deserialize将尝试使用默认构造函数创建该类型的新实例.C#中的匿名类型没有公共无参数构造函数,因此操作失败.
这也可以使用内置的JavaScriptSerializer来完成,如下所示:
object result = new JavaScriptSerializer().DeserializeObject(JSONData);
Run Code Online (Sandbox Code Playgroud)
这将返回一个具有键值对的object []实例.
| 归档时间: |
|
| 查看次数: |
59810 次 |
| 最近记录: |