使用DataContractJsonSerializer反序列化一个简单的JSON数组

我确定这个问题一再被问到,但由于某种原因,我仍然无法让这个问题起作用。

我想反序列化包含单个成员的JSON对象; 一个字符串数组:

{"results" : ["a", "b"]} 

这是我正在尝试反序列化的类:

 public class Whatever { [DataMember(Name = "results")] public string[] Results { get; protected set; } } 

这是Deserialize方法:

 private static T Deserialize(string json) { var instance = Activator.CreateInstance(); using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(json))) { var serializer = new DataContractJsonSerializer(instance.GetType()); return (T)serializer.ReadObject(ms); } } 

Deserialize("{\"results\" : [\"a\", \"b\"]}")类的调用返回一个初始化的Whatever实例,但Results数组保持为null

Whatever的结构有Whatever吗?

啊,在发布之后我意识到我在Whatever上缺少DataContract属性修饰:

 [DataContract] public class Whatever { [DataMember(Name = "results")] public string[] Results { get; protected set; } } 

现在它工作正常。

我知道,这个post很禁止; 但是:如果你有一个jsonarray-信息字符串绑定到一个数据类,也可以直接返回一个类对象列表; 即:

 List filesToMove = new List(); public T deserializeJSON(string json) { var instance = typeof(T); var lst = new List(); using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(json))) { var deserializer = new DataContractJsonSerializer(instance); return (T)deserializer.ReadObject(ms); } } someJsonArrayString = "[{\"ID\":7},{\"ID\":16}]"; filesToMove = deserializeJSON>(someJsonArrayString); Console.WriteLine(filesToMove[1].ID); // returns 16 

使用dataclass SomeDataClass.cs:

 [DataContract] class SomeDataClass { [DataMember] public int ID { get; set; } }