2017-02-22 10 views
0

現在、DataContractJsonSerializerクラスを使用して逆シリアル化しようとしているJSONデータがあります。ただし、データ内の配列の1つに複数のタイプのオブジェクトが含まれています。このデータを正しくデシリアライズする方法はありますか?私はa very similar question existsだと認識していますが、私はJson.NETやその他のサードパーティ製のライブラリを使用したくないと思います。DataContractsを使用してマルチタイプJSON配列を逆シリアル化する

EDIT:小さな例:この例で

、のは、JSONは、各要素がフォーム{"foo":string}又は{"bar":string}のいずれかである形態[{"foo":string},{"bar":string},{"foo":string},{"foo":string},...]であるとしよう。その後、契約は、次のような設定することができます

この文脈において
[DataContract] 
class Foo { [DataMember] public string foo; } 

[DataContract] 
class Bar { [DataMember] public string bar; } 

、私の質問は、はどのように私はFoo sおよびBar秒のこの配列をデシリアライズしますか?

+0

は 'しかし、データ内のアレイの一つはobjects'複数の種類が含まれている - あなたは一例を提供することができ?これらのオブジェクトタイプはどのように異なっていますか?なんらかの理由で完全に異なっている場合は、 '動的な 'タイプと考えることができます。逆シリアル化しようとしているJSONとモデルのサンプルを投稿すると便利です。 –

+0

@ShaneRay小さな例を追加しました。私の 'Foo'と' Bar'は全く異なる性質を持っています。 – LegionMammal978

答えて

0

これは正しく聞こえません。 1つの配列に2つの完全に異なる型があるべきではありません。私はこのような何かをしようとするだろう提供JSON ....

[DataContract] 
class SomeClass 
{ 
    [DataMember] 
    public string foo { get; set;} 
    [DataMember] 
    public string bar { get; set;} 
} 

が続いて、各プロパティに IsNullOrWhiteSpace()のチェックを考えます。より多くのコードを更新しました

...

static void Main(string[] args) 
    { 
     SomeClass[] output; 
     var json = "[{\"foo\":\"value\"},{\"bar\":\"value\"},{\"foo\":\"value1\"},{\"foo\":\"value1\"}]"; 

     using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(json))) 
     { 
      var deserializer = new DataContractJsonSerializer(typeof(SomeClass[])); 
      output = (SomeClass[])deserializer.ReadObject(ms); 
     } 

     // do something with output 
     Console.WriteLine(output.Length); 
    } 
+0

具体的には、配列内に2つの応答(異なる形式)を与える特定のJSON Web APIをクエリしています。 – LegionMammal978

+0

その場合、2つの別々のモデルが必要です。 'ModelA'にデシリアライズした配列を返す最初のAPI呼び出しの場合。 2番目のAPIは 'ModelB'にデシリアライズして呼び出します。 –

+0

私はあなたが私が言うことを誤解していると思います。私は1つのリクエストをサーバに渡し、 'Foo'と' Bar'を持つ配列で1つのレスポンスを受け取ります。ここでは、この配列を逆シリアル化して 'Foo'と' Bar'を取得する方法を尋ねています。 – LegionMammal978

関連する問題