这是我的情况:我有一个MVC3应用程序,它有一些非常复杂的C#对象,并且会在这个应用程序中呈现给视图。但是,我有一个新的要求:控制台应用程序(我也在编写)将在调度程序下运行,它需要从这个MVC3应用程序中提取这些对象,然后对这些复杂对象执行其他操作。
由于我可以控制这两个应用程序,因此我可以共享它们之间的复杂对象库。所有这些对象都标记为[Serializable]。但是,我无法找到一种简单的方法来序列化这些对象并将它们从MVC3应用程序发送到Console应用程序。
我尝试使用简单的JavaScriptSerializer并使用HttpClient读取字符串,然后在控制台应用程序端对其进行反序列化,但遗憾的是它没有正确地反序列化数据。一切都是空的。我可以在到达控制台应用程序时检查断点上的字符串,并且字符串中的所有数据都存在,但它不会被正确地反序列化。
有更简单的方法吗?我不关心序列化方法是什么。数据不必作为JSON传递,除了我之外没有其他应用程序将使用这些对象。但到目前为止,我无法找出生成/使用这些对象的最简单方法。
我知道我可以整体“创建一个Web服务合同”并使用数据注释路径,但我希望有一种更简单,更省时的方法。
答案 0 :(得分:4)
使用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;
P.S。:请注意,对象的方法或状态不会被序列化,只有公共属性。
答案 1 :(得分:0)
你的行动可以归还你的对象吗?如果是这样,您的客户端代码将类似于(使用HttpClient)
var result = client.GetAsync(url).Result;
var myObj = await result.Content.ReadAsAsync<T>();