我确定这个问题一再被问到,但由于某种原因,我仍然无法让这个问题起作用.
我想反序列化包含单个成员的JSON对象; 一个字符串数组:
{"results" : ["a", "b"]}
Run Code Online (Sandbox Code Playgroud)
这是我正在尝试反序列化的类:
public class Whatever {
[DataMember(Name = "results")]
public string[] Results { get; protected set; }
}
Run Code Online (Sandbox Code Playgroud)
这是Deserialize方法:
private static T Deserialize<T>(string json)
{
var instance = Activator.CreateInstance<T>();
using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(json)))
{
var serializer = new DataContractJsonSerializer(instance.GetType());
return (T)serializer.ReadObject(ms);
}
}
Run Code Online (Sandbox Code Playgroud)
类似的调用Deserialize<Whatever>("{\"results\" : [\"a\", \"b\"]}")
返回一个初始化的实例,Whatever
但Results
数组仍在停留null
.
结构有问题Whatever
吗?
And*_*ech 13
啊,发布后我意识到我错过了DataContract
属性装饰Whatever
:
[DataContract]
public class Whatever {
[DataMember(Name = "results")]
public string[] Results { get; protected set; }
}
Run Code Online (Sandbox Code Playgroud)
现在它工作正常.
我知道,这个帖子很禁止; 但是:如果你有一个jsonarray信息字符串绑定到一个数据类,也可以直接返回一个类对象列表; 即:
List<SomeDataClass> filesToMove = new List<SomeDataClass>();
public T deserializeJSON<T>(string json)
{
var instance = typeof(T);
var lst = new List<SomeDataClass>();
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<List<SomeDataClass>>(someJsonArrayString);
Console.WriteLine(filesToMove[1].ID); // returns 16
Run Code Online (Sandbox Code Playgroud)
与dataclass SomeDataClass.cs:
[DataContract]
class SomeDataClass
{
[DataMember]
public int ID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
47910 次 |
最近记录: |