c# - WCF REST服务JSON客户端

本文关键字:JSON 客户端 服务 REST WCF | 更新日期: 2023-09-27 18:09:31

我尝试为我找到的WCF REST服务'创建一个简单的客户端这里。

我添加了服务引用,并编写了以下代码:

private void button1_Click(object sender, EventArgs e)
{

    WebClient proxy = new WebClient();
    string serviceURL =
            string.Format("http://localhost:53215/IBookService.svc/GetBooksNames");
    byte[] data = proxy.DownloadData(serviceURL);
    Stream stream = new MemoryStream(data);
    DataContractJsonSerializer obj =
        new DataContractJsonSerializer(typeof(finalProject_ClientX.ServiceReference3.Book));
    finalProject_ClientX.ServiceReference3.Book book = obj.ReadObject(stream) as finalProject_ClientX.ServiceReference3.Book;
    MessageBox.Show("book ID : " + book.BookName);
}

当我运行代码(按下按钮)时,我得到以下错误:

类型的未处理异常"System.Runtime.Serialization。SerializationException'发生在System.Runtime.Serialization.dll

附加信息:类型"finalProject_ClientX.ServiceReference3。不能序列化到因为它的IsReference设置为"True"。JSON格式可以不支持引用,因为没有标准格式表示引用。要启用序列化,请禁用类的类型或适当的父类的IsReference设置类型。

当我运行"http://localhost:53215/IBookService。svc/GetBooksNames"在浏览器中我得到了这些书:

"["MVC音乐商店-教程-v3.0"、"Pro.ASP.NET.MVC.3。框架","应用架构指南","四人帮设计模式","CS4口袋参考"],

有什么问题吗?

c# - WCF REST服务JSON客户端

似乎实体框架包括属性IsReference = true时,它添加属性DataContract

所以,我建议你包含JSON。Net nuget包。然后修改代码如下:

private void button1_Click(object sender, EventArgs e)
{
    WebClient proxy = new WebClient();
    string serviceURL =
            string.Format("http://localhost:53215/IBookService.svc/GetBooksNames");
    byte[] data = proxy.DownloadData(serviceURL);
    var jsonString = Encoding.UTF8.GetString(data);
    IList<string> bookNames = JArray.Parse(jsonString).ToObject<IList<string>>();
    //Do something with the list
    //foreach (string bookName in bookNames)
    //{
    //}    
}