从 MVC3 应用程序序列化、return 和使用复杂 C# 对象的最佳方法是什么?
What is the best way to serialize, return and consume complex C# object from an MVC3 app?
这是我的情况:我有一个 MVC3 应用程序,它有一些非常复杂的 C# 对象,这些对象被呈现到这个应用程序的视图中。但是,我有一个新的要求:一个控制台应用程序(我也在写)将 运行 在一个调度程序下,它需要从这个 MVC3 应用程序中拉出这些对象,然后用这些复杂的对象做一些其他事情。
因为我可以控制这两个应用程序,所以我可以在它们之间共享一个包含复杂对象的库。所有这些对象都被标记为 [Serializable]。但是,我想不出一种简单的方法来序列化这些对象并将它们从 MVC3 应用程序发送到控制台应用程序。
我尝试了简单的 JavaScriptSerializer 并使用 HttpClient 读取字符串,然后在控制台应用程序端反序列化它,但不幸的是它没有正确反序列化数据。一切都是空的。当它到达控制台应用程序时,我可以在断点处检查字符串,并且所有数据都在字符串中,但它只是没有正确反序列化。
有更简单的方法吗?我不关心序列化方法是什么。数据不必作为 JSON 传递,除了我的应用程序外,没有其他应用程序会使用这些对象。但是到目前为止,我还想不出 produce/consume 这些对象的最简单方法。
我知道我可以走完整个 "create a web service contract" 并使用数据注释路线,但我希望有一种更简单、更省时的方法。
使用Json.NET:
服务器端
string serializedObject = JsonConvert.SerializeObject(yourComplexObject);
// Send the string to the client...
客户端
在客户端,你甚至不需要知道反序列化对象的类型,你可以利用anonymous objects and dynamic:
string serializedObject = // ... Fetch from server
dynamic complexObject = JsonConvert.DeserializeObject(serializedObject);
// ...
string id = complexObject.UserId;
P.S.:请注意,对象的方法或状态不会被序列化,只有 public 属性会被序列化。
你的动作可以return你的对象吗?如果是这样,您的客户端代码将类似于(使用 HttpClient)
var result = client.GetAsync(url).Result;
var myObj = await result.Content.ReadAsAsync<T>();
这是我的情况:我有一个 MVC3 应用程序,它有一些非常复杂的 C# 对象,这些对象被呈现到这个应用程序的视图中。但是,我有一个新的要求:一个控制台应用程序(我也在写)将 运行 在一个调度程序下,它需要从这个 MVC3 应用程序中拉出这些对象,然后用这些复杂的对象做一些其他事情。
因为我可以控制这两个应用程序,所以我可以在它们之间共享一个包含复杂对象的库。所有这些对象都被标记为 [Serializable]。但是,我想不出一种简单的方法来序列化这些对象并将它们从 MVC3 应用程序发送到控制台应用程序。
我尝试了简单的 JavaScriptSerializer 并使用 HttpClient 读取字符串,然后在控制台应用程序端反序列化它,但不幸的是它没有正确反序列化数据。一切都是空的。当它到达控制台应用程序时,我可以在断点处检查字符串,并且所有数据都在字符串中,但它只是没有正确反序列化。
有更简单的方法吗?我不关心序列化方法是什么。数据不必作为 JSON 传递,除了我的应用程序外,没有其他应用程序会使用这些对象。但是到目前为止,我还想不出 produce/consume 这些对象的最简单方法。
我知道我可以走完整个 "create a web service contract" 并使用数据注释路线,但我希望有一种更简单、更省时的方法。
使用Json.NET:
服务器端
string serializedObject = JsonConvert.SerializeObject(yourComplexObject);
// Send the string to the client...
客户端
在客户端,你甚至不需要知道反序列化对象的类型,你可以利用anonymous objects and dynamic:
string serializedObject = // ... Fetch from server
dynamic complexObject = JsonConvert.DeserializeObject(serializedObject);
// ...
string id = complexObject.UserId;
P.S.:请注意,对象的方法或状态不会被序列化,只有 public 属性会被序列化。
你的动作可以return你的对象吗?如果是这样,您的客户端代码将类似于(使用 HttpClient)
var result = client.GetAsync(url).Result;
var myObj = await result.Content.ReadAsAsync<T>();