簡體   English   中英

如何通過.NET Web服務將不同對象的列表作為JSON對象發送回?

[英]How do I send a list of different objects back as a JSON object through a .NET web service?

假設我有以下模型:

 AnimalModel   
    DogModel : AnimalModel
    CatModel : AnimalModel
    ElephantModel : AnimalModel

我想在Web服務中將List作為JSON對象返回...如何做到最好?

請記住,通過上面的排序,ElephantModel繼承自AnimalModel,但顯然包含了AnimalModel所沒有的其他類成員。 (即TrunkSize),並且我認為這是導致錯誤的原因。

現在我有:

[WebGet(BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "?query={query}")]
List<AnimalModel> Animals (string query);

[WebGet(BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "?query={query}")]
ElephantModel Elephant (string query);

如果我只是制作一個類似List的函數並嘗試將其發送回去,那似乎很合適。 如果我首先將其序列化為JSON字符串,則它將傳遞該字符串-但隨后我必須再次對其進行解析。

但是,如果我只是為ElephantModel或CatModel進行此操作,它將非常完美! 無需序列化,在另一端也無需解析...就像冠軍。

當我嘗試發送子模型從中繼承的模型列表時,它會中斷。 但是,如果我可以將其序列化為正確的JSON字符串,發送並接收該字符串以進行解析,那么我必須做得更好!

我怎樣才能做到這一點?

我建議使用Json.NET 序列化和反序列化非常簡單。

//your object
Product product = new Product();
product.Name = "Apple";
product.Expiry = new DateTime(2008, 12, 28);
product.Price = 3.99M;
product.Sizes = new string[] { "Small", "Medium", "Large" };

//serialize it 
string json = JsonConvert.SerializeObject(product);

//will look like this :
//{
//  "Name": "Apple",
//  "Expiry": new Date(1230422400000),
//  "Price": 3.99,
//  "Sizes": [
//    "Small",
//    "Medium",
//    "Large"
//  ]
//}


//on the 'other end' you just deserialize it with one line of code!
Product deserializedProduct = JsonConvert.DeserializeObject<Product>(json);

暫無
暫無

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

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