假设我有以下型号:
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字符串,发送它,并接收该字符串进行解析,那么我必须做得更好!
我该怎么做?
答案 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);