这是我的情况:我有一个 MVC3 应用程序,它有一些非常复杂的 C# 对象,这些对象被呈现到这个应用程序的 View 中。然而,我有一个新的要求:一个控制台应用程序(我也在写)将在一个调度程序下运行,它需要从这个 MVC3 应用程序中拉出这些对象,然后用这些复杂的对象做一些其他事情。
因为我可以控制这两个应用程序,所以我可以在它们之间共享一个包含复杂对象的库。所有这些对象都被标记为 [Serializable]。但是,我想不出一种简单的方法来序列化这些对象并将它们从 MVC3 应用程序发送到控制台应用程序。
我尝试了简单的 JavaScriptSerializer 并使用 HttpClient 读取字符串,然后在控制台应用程序端反序列化它,但不幸的是它没有正确反序列化数据。一切都是空的。当它到达控制台应用程序时,我可以在断点处检查字符串,并且所有数据都在字符串中,但它只是没有正确反序列化。
有没有更简单的方法来做到这一点?我不关心序列化方法是什么。数据不必作为 JSON 传递,除了我的应用程序外,其他应用程序都不会使用这些对象。但到目前为止,我还想不出生产/消费这些对象的最简单方法。
我知道我可以完成整个“创建 Web 服务契约(Contract)”并使用数据注释路线,但我希望有一种更简单、更省时的方法。
最佳答案
使用 Json.NET :
服务器端
string serializedObject = JsonConvert.SerializeObject(yourComplexObject);
// Send the string to the client...
客户端
在客户端,你甚至不需要知道反序列化对象的类型,你可以利用anonymous objects和 dynamic :
string serializedObject = // ... Fetch from server
dynamic complexObject = JsonConvert.DeserializeObject(serializedObject);
// ...
string id = complexObject.UserId;
附言:请注意对象的方法或状态不会被序列化,只有公共(public)属性会被序列化。
关于c# - 从 MVC3 应用程序序列化、返回和使用复杂 C# 对象的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33550336/