0

假设我有以下模型:

 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 字符串、发送它并接收该字符串以进行解析,那么我必须做一些更好的事情!

我怎样才能做到这一点?

4

1 回答 1

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);
于 2012-10-19T17:44:44.983 回答