0

次のモデルがあるとしましょう。

 AnimalModel   
    DogModel : AnimalModel
    CatModel : AnimalModel
    ElephantModel : AnimalModel

そして、WebサービスでJSONオブジェクトとしてListを返したいのですが...どうすればこれを最善に行うことができますか?

上記の並べ替えでは、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 に答える