C# winform:序列化/反序列化来自 REST 服务的 JSON 数据以在应用程序中使用



我有网格视图并将其绑定到基于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 的最简单方法。

相关内容

  • 没有找到相关文章

最新更新