使用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; } }
- 如何指定.NET Generics约束中不允许的类型?
- Bitmap.Save(Stream,ImageFormat)如何格式化数据?
- WebClient中的POST数组(C#/ .net)
- 用于修改machine.config文件的API – ‘DbProviderFactories’部分每个配置文件只能出现一次
- 如何在严格分层的架构中拆分层并促进模块化而不会造成不必要的冗余?
- System.Linq.Expressions:在运行时绑定LambdaExpression输入
- 数组的GetUpperBound()和GetLowerBound()函数
- Console.ReadLine(“默认文本可编辑文本在线”)
- C#中的空合并运算符(??)是否是线程安全的?