使用DataContracts反序列化多类型JSON数组

时间:2017-02-22 16:11:35

标签: c# json-deserialization datacontractjsonserializer

目前,我有一些JSON数据,我试图使用DataContractJsonSerializer类反序列化。但是,数据中的一个数组包含多种类型的对象。有没有办法正确反序列化这些数据?我知道a very similar question exists,但我不想使用Json.NET或任何其他第三方库。

编辑:一个小例子:

在这种情况下,我们假设JSON的格式为[{"foo":string},{"bar":string},{"foo":string},{"foo":string},...],其中每个元素都是{"foo":string}{"bar":string}形式。然后,合同可以这样设置:

[DataContract]
class Foo { [DataMember] public string foo; }

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

在这种情况下,我的问题是,如何反序列化此FooBar s数组?

1 个答案:

答案 0 :(得分:0)

这听起来不对。单个阵列中不应该有两种完全不同的类型。鉴于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);
    }