2011-08-09 27 views
0

我在寫一個WCF服務,它以JSON格式向客戶端返回數據。 我想輸出JSON它看起來像如下爲我的WCF JSON服務設計DataContract的幫助

{ 22877:{ ID: 「22877」, 名稱: 「富酒吧」, 類型: 「用戶」, 活動:{ 數據: ] } } 405564:{ ID: 「405564」, 名: 「酒吧富」, 類型: 「用戶」, 活動:{ 數據:[ ] } } }

我很難想出一個類/ DataContract,它將通過WCF JSON服務序列化爲上述格式。

我嘗試以下

[DataContract] 
internal class Person 
{ 
    [DataMember] 
    internal string id; 

    [DataMember] 
    internal string name; 

    [DataMember] 
    internal string type; 

    [DataMember] 
    internal Activities activities; 
} 

[DataContract] 
internal class Activities 
{ 
    [DataMember(Name = "data")] 
    internal List<Activity> activity; 
} 

[DataContract] 
internal class Activity 
{ 
    internal string name; 
} 

當我從我的WCF方法返回的人的名單,JSON響應如下所示

[{ 「活動」:{ 「數據」:[{} ]}, 「ID」: 「1234」, 「姓名」: 「約翰」, 「類型」: 「用戶」},{ 「活動」:{ 「數據」:[{}]}, 「ID」:「1234 「,」name「:」John「,」type「:」user「}]

任何有關如何將」id「(這是動態的)作爲每個內部JSON對象的鍵的建議, }括號中的項目集合而不是[]?

回答

1

DataContractJsonSerializer(DCJS)將只能序列化(和反序列化)一個遵循定義模式的對象圖。您想要序列化的數據不會這樣做,所以DCJS不能直接用於此目的。

但是,您可以使用的一件事是可以從0123plex(「WCF Support for jQuery」下載)的codeplex項目中獲得的無類型JSON支持。您可以在codeplex站點或http://blogs.msdn.com/b/carlosfigueira/archive/2010/10/29/working-with-untyped-json-in-a-wcf-service.aspx找到更多信息。

下面的代碼顯示瞭如何以您想要的格式序列化數據;通過codeplex項目(WebHttpBehavior3)的新行爲,您可以將JsonObject類作爲您的操作的返回類型。

public class StackOverflow_6990927 
{ 
    [DataContract] 
    internal class Person 
    { 
     [DataMember] 
     internal string id; 
     [DataMember] 
     internal string name; 
     [DataMember] 
     internal string type; 
     [DataMember] 
     internal Activities activities; 
    } 
    [DataContract] 
    internal class Activities 
    { 
     [DataMember(Name = "data")] 
     internal List<Activity> activity; 
    } 
    [DataContract] 
    internal class Activity 
    { 
     [DataMember] 
     public string name; 
    } 
    public static void Test() 
    { 
     Activities noActivities = new Activities { activity = new List<Activity>() }; 
     Activities someActivities = new Activities 
     { 
      activity = new List<Activity> 
      { 
       new Activity { name = "hiking" }, 
      } 
     }; 
     Person[] people = new Person[] 
     { 
      new Person { id = "22877", name = "Foo Bar", type = "user", activities = noActivities }, 
      new Person { id = "405564", name = "Bar Foo", type = "user", activities = someActivities }, 
     }; 
     JsonObject jo = new JsonObject(people.Select(x => new KeyValuePair<string, JsonValue>(x.id, JsonValueExtensions.CreateFrom(x)))); 
     Console.WriteLine(jo); 
    } 
} 
+0

這應該做..謝謝 – user330612