我有网格视图并将其绑定到基于REST的Web服务的数据调用。REST 服务以 JSON 格式提供它,那么我如何反序列化并用于我的网格?
这是我拥有的大部分代码,
public ICollection<Employee> GetEmployees()
{
var request = HttpWebRequest.Create(GetEndPointAddress("GetEmployeeService"));
var response = request.GetResponse();
var stream = response.GetResponseStream();
var serializer = new DataContractSerializer(typeof(ICollection<Employee>));
var employees = serializer.ReadObject(stream) as ICollection<Employee>;
response.Close();
return employees;
}
public Uri GetServiceBaseAddress
{
get
{
return new Uri("http://localhost/Employeeservices/api");
}
}
private Uri GetEndPointAddress(string relativeAddress)
{
return new Uri(GetServiceBaseAddress.ToString() + "/" + relativeAddress);
}
我得到以下错误:
反序列化类型为 System.Collections.Generic.ICollection'1[[EmployeeApp.Models.Employee, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] 类型的对象时出错。根级别的数据无效。线
此外,如果我对任何这些数据进行更改,如何将数据发布回服务?
问题是您使用的是 DataContractSerializer,它是一个 XML 序列化程序。不能使用 XML 序列化程序并期望它反序列化 JSON 数据,因为它们是两种完全不同的数据格式。
首先,考虑使用 DataContractJsonSerializer 是否适合您。我的猜测是不是,因为使用 DCJS 带有自己的一组需求、约束和术语,您很可能不熟悉这些要求、约束和术语,或者几乎没有灵活性来使用或熟悉,或者只是矫枉过正。若要了解这是否是一个选项,请查看 JSON API 参考和独立的 JSON 序列化示例。
我最好的建议是使用 Json .NET 框架。请参阅 http://json.codeplex.com/以了解可以使用它执行的操作 - 这可能是开始使用 .NET 和 JSON 的最简单方法。