2016-11-07 28 views
0

を期待するよりも違って見えるだから、私は実装では、次のインターフェイス宣言JSONのリターンは、私が

namespace MyAPI 
{ 
    [ServiceContract(Namespace = "http://MyAPI")] 
    public interface IMyAPI 
    { 
     [OperationContract] 
     [WebInvoke(Method = "GET", UriTemplate = "GetSomething?someInt={someInt}", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] 
     Dictionary<string, List<string>> GetSomething(int someInt); 
    } 
} 

とAPIのように使用していたサービス契約を締結している私は、次のような何かを私は何かを返すために行くとき

namespace MyAPI 
{ 
    [ServiceBehavior] 
    public class MyAPI : IMyAPI 
    { 

     public Dictionary<string, List<string>> GetSomething(int someInt) 
     { 

      Dictionary<string, List<string>> something = new Dictionary<string, List<string>>(); 
      something["FIRST KEY"] = new List<string>(); 
      something["SECOND KEY"] = new List<string>(); 

      // fill up these lists... 

      return something; 
     } 
    } 
} 

は、しかし、私はこの

[{"Key":"FIRST KEY","Value":[]},{"Key":"SECOND KEY","Value":[]}] 
のようにフォーマットされて何かを得ます0

私はJSONが次のように見えると期待しています

{"FIRST KEY":[], "SECOND KEY":[]} 

なぜ2つの違いはありますか?私は文字列にシリアライズすることができますが、それはちょうど余分な(不要な)ステップのように思えます。どんな助けでも大歓迎です

+0

'。それが「理由」です。私は修正を探しています。 –

+0

Json.NETを使用すると、望ましい出力が得られます。 – rinukkusu

+0

これは話題かもしれないと思いますか? http://stackoverflow.com/a/10368876/424129 –

答えて

1

「何か」はコンテナですから - >キー値のペアのリストです。 それはあなたの構造が得られる理由です["key<string>": value<Array<string>>] 申し訳ありません、それは私の表記です。

辞書はコレクションなので、配列に変換されます。その構造は、参照型であるキー値のペアを保持することです。そのため、JSONでオブジェクト表記を取得しています。値は文字列のリストであり、その理由は配列の構文です。

あなたの期待構造のような2つのプロパティを持つONEオブジェクトについて説明します。System.Collections.Generic.Dictionary は `` System.Collections.Generic.KeyValuePair の配列としてシリアライズ `、良いか悪いのために

class SomeThing{ 
    [DisplayName("FIRST KEY")] 
    List<string> FirstKey; 

    [DisplayName("SECOND KEY")] 
    List<string> SecondKey; 
} 
関連する問題