从MVC3应用程序序列化、返回和使用复杂C#对象的最佳方式是什么

本文关键字:对象 复杂 最佳 是什么 方式 应用程序 MVC3 序列化 返回 | 更新日期: 2023-09-27 18:20:47

以下是我的情况:我有一个MVC3应用程序,它有一些非常复杂的C#对象,这些对象被渲染到该应用程序中的视图中。然而,我有一个新的要求:控制台应用程序(我也在编写)将在调度器下运行,它需要从这个MVC3应用程序中提取这些对象,然后对这些复杂的对象执行其他操作。

由于我可以控制这两个应用程序,所以我可以在它们之间共享一个复杂对象库。所有这些对象都标记为[Serializable]。然而,我无法找到一种简单的方法来序列化这些对象,并将它们从MVC3应用程序发送到Console应用程序。

我尝试了简单的JavaScriptSerializer,并使用HttpClient读取字符串,然后在控制台应用程序端对其进行反序列化,但不幸的是,它没有正确地反序列化数据。一切都是空的。当字符串到达控制台应用程序时,我可以在断点上检查它,并且所有数据都在字符串中,但它没有正确地反序列化。

有更简单的方法吗?我不在乎序列化方法是什么。数据不必以JSON的形式传递,除了我的应用程序之外,没有其他应用程序会使用这些对象。但到目前为止,我还想不出生产/消费这些对象的最简单方法。

我知道我可以完成整个"创建web服务合同"并使用数据注释路线,但我希望有一种更简单、耗时更少的方法。

从MVC3应用程序序列化、返回和使用复杂C#对象的最佳方式是什么

使用Json.NET:

服务器端

string serializedObject = JsonConvert.SerializeObject(yourComplexObject);
// Send the string to the client...

客户端

在客户端中,您甚至不必知道反序列化对象的类型,您可以利用匿名对象和动态:

string serializedObject = // ... Fetch from server
dynamic complexObject = JsonConvert.DeserializeObject(serializedObject);
// ...
string id = complexObject.UserId;

p.S.:请注意,对象的方法或状态不会被序列化,只有公共属性会被序列化。

您的操作可以直接返回对象吗?如果是这样,您的客户端代码看起来像(使用HttpClient)

var result = client.GetAsync(url).Result;
var myObj = await result.Content.ReadAsAsync<T>();