2012-04-23 49 views
0

我想序列化.net對象包含另一個數據約定對象作爲參數。代碼如下....NET JSON序列化:如何將DataContract作爲另一個DataContract的成員

[DataContract] 
     public class JsonObject2 
     { 
      [DataMember(Name = "field1")] 
      string field1 { get; set; } 
      [DataMember(Name = "field2")] 
      string field2 { get; set; } 
      [DataMember(Name = "field3")] 
      object[][] test = { new object[]{"key1", "value1"}, new object[]{"key2", "value2"}, new object[]{"key3", "value3"} }; 
     } 

     [DataContract] 
     public class JsonObject3 
     { 
      [DataMember(Name = "field1")] 
      public string field1 { get; set; } 
      [DataMember(Name = "field2")] 
      public object field2 { get; set; } 
     } 

DataContractJsonSerializer dcjs2 = new DataContractJsonSerializer(typeof(JsonObject3)); 

       JsonObject3 obj3 = new JsonObject3(); 
       obj3.field1 = "hello"; 
       obj3.field2 = new JsonObject2(); 
       dcjs2.WriteObject(s, obj3); 
       s.Position = 0; 
       MessageBox.Show(new StreamReader(s).ReadToEnd()); 

做好以上,導致以下異常...

「{」 類型 'JSONParser.Form1 + JsonObject2' 數據合同名稱「Form1.JsonObject2 :http://schemas.datacontract.org/2004/07/JSONParser'不是預期的。將任何未知的靜態類型添加到已知類型列表中 - 例如,通過使用KnownTypeAttribute屬性或將它們添加到傳遞給DataContractSerializer的已知類型列表中。「}」

我無法弄清楚如何執行該例外中的任何建議。

  1. 如何添加到KnownTypes列表中?
  2. 你如何使用KnownTypeAttribute?

回答

0

好的,想通了如何做到這一點。我不想刪除這個問題的情況下,其他人發現它是有用的,所以這裏是解決方案...

[DataContract] 
    [KnownType(typeof(JsonObject2))] 
    public class JsonObject2 
    { 
     [DataMember(Name = "field1")] 
     string field1 { get; set; } 
     [DataMember(Name = "field2")] 
     string field2 { get; set; } 
     [DataMember(Name = "field3")] 
     object[][] test = { new object[]{"key1", "value1"}, new object[]{"key2", "value2"}, new object[]{"key3", "value3"} }; 
    } 

    [DataContract] 
    public class JsonObject3 
    { 
     [DataMember(Name = "field1")] 
     public string field1 { get; set; }  
     [DataMember(Name = "field2")] 
     public object field2 { get; set; } 
    } 

通知的[KnownType(typeof(JsonObject2))]的JsonObject2類的聲明之上?這解決了它。

相關問題