如何通过.NET Web服务将不同对象的列表作为JSON对象发回?

时间:2012-10-19 17:23:50

标签: c# .net json

假设我有以下型号:

 AnimalModel   
    DogModel : AnimalModel
    CatModel : AnimalModel
    ElephantModel : AnimalModel

我想在我的网络服务中将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字符串,发送它,并接收该字符串进行解析,那么我必须做得更好!

我该怎么做?

1 个答案:

答案 0 :(得分:1)

我建议使用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);