0

我有网格视图并将其绑定到从基于 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]] 类型的对象时出错。根级别的数据无效。线

另外,如果我对这些数据中的任何一个进行更改,如何将数据发布回服务?

4

1 回答 1

0

问题是您正在使用 DataContractSerializer,它是一个 XML 序列化程序。您不能使用 XML 序列化程序并期望它反序列化 JSON 数据,因为它们是两种完全不同的数据格式。

首先,考虑使用 DataContractJsonSerializer 是否适合您。我的猜测是它不是,因为使用 DCJS 有它自己的一组要求、约束和术语,你很可能不熟悉,使用或熟悉的灵活性很小,或者只是矫枉过正。要了解这是否是一个选项,请查看JSON API 参考独立的 JSON 序列化示例。

我最好的建议是使用 Json .NET 框架。请参阅http://json.codeplex.com/以了解您可以使用它做什么——这可能是您开始使用 .NET 和 JSON 的最简单方法。

于 2012-04-26T15:59:39.317 回答