2012-04-23 7 views
0

.netオブジェクトをシリアル化しようとしていますが、別のデータコントラクトオブジェクトがパラメータとして含まれています。コードデータコントラクト名「Form1.JsonObject2と以下のようである...次の例外では上記の結果を行う.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」 :http://schemas.datacontract.org/2004/07/JSONParser 'は期待されていません。 KnownTypeAttribute属性を使用するか、DataContractSerializerに渡される既知のタイプのリストに追加するなど、既知のタイプのリストに静的に知られていないタイプを追加してください。 "}"

その例外で与えられた勧告のいずれかを実行する。

  1. KnownTypesのリストにどのように追加しますか?
  2. どのようにKnownTypeAttributeを使用しますか?

答えて

0

[OK]をクリックします。他の誰かがそう、ここで、重宝した場合に、私はJsonObject2クラスの宣言の上のソリューションです...

[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))]この質問を削除したくありませんでしたの?それがそれを解決しました。

関連する問題