簡體   English   中英

從MVC3應用程序序列化,返回和使用復雜的C#對象的最佳方法是什么?

[英]What is the best way to serialize, return and consume complex C# object from an MVC3 app?

這是我的情況:我有一個MVC3應用程序,其中包含一些非常復雜的C#對象,並且這些對象在此應用程序中呈現為視圖。 但是,我有一個新要求:控制台應用程序(我也在寫)將在調度程序下運行,它需要從此MVC3應用程序中提取這些對象,然后對這些復雜的對象執行其他操作。

由於我可以控制兩個應用程序,因此我可以在它們之間共享一個包含復雜對象的庫。 所有這些對象都標記為[可序列化]。 但是,我無法找到一種簡單的方法來序列化這些對象並將其從MVC3應用程序發送到控制台應用程序。

我嘗試了簡單的JavaScriptSerializer並使用HttpClient讀取字符串,然后在控制台應用程序結尾將其反序列化,但是不幸的是,它無法正確反序列化數據。 一切都為空。 我可以在到達控制台應用程序時在斷點上檢查字符串,並且所有數據都在該字符串中,但只是無法正確反序列化。

有沒有更簡單的方法可以做到這一點? 我不在乎什么是序列化方法。 數據不必作為JSON傳遞,除我以外,其他任何應用程序都將使用這些對象。 但是到目前為止,我還沒有找到產生/使用這些對象的最簡單方法。

我知道我可以沿用整個“創建Web服務合同”並使用數據注釋路線,但是我希望有一種更簡單,更省時的方法。

使用Json.NET

服務器端

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

客戶端

在客戶端中,您甚至不必知道反序列化對象的類型,就可以利用匿名對象dynamic

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

PS :請注意,對象的方法或狀態不會被序列化,只有公共屬性會被序列化。

您的動作可以返回您的對象嗎? 如果是這樣,您的客戶端代碼將類似於(使用HttpClient)

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM