2016-11-07 54 views
0

所以,我有我喜歡使用的API有以下接口聲明JSON回報C#的ServiceContract看起來不同於我期望

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); 
    } 
} 

在實施服務合同我像做以下

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":[]}] 

在那裏我會想到JSON看看下面

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

爲什麼兩者之間的區別?我可以序列化成一個字符串,但這似乎是一個額外的(不必要的)步驟。任何幫助非常感謝

+0

是好是壞,'System.Collections.Generic.Dictionary '序列化爲System.Collections.Generic.KeyValuePair 的'陣列'。這就是「爲什麼」;我正在四處尋找解決辦法。 –

+0

使用Json.NET將爲您提供所需的輸出。 – rinukkusu

+0

我認爲這可能是主題? http://stackoverflow.com/a/10368876/424129 –

回答

1

這是因爲「東西」是一個容器 - >一個鍵值對的列表。 這就是爲什麼你得到的結構["key<string>": value<Array<string>>] 對不起,這只是我的記譜。

所以一個字典轉換爲一個數組,因爲它是一個集合。其結構是保存碰巧是參考類型的關鍵值對。這就是爲什麼你在JSON中獲得對象表示法的原因。該值再次是字符串列表,這就是數組語法的原因。

你的預期的結構描述了一個對象,具有2個屬性,如:

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

    [DisplayName("SECOND KEY")] 
    List<string> SecondKey; 
} 
相關問題