C# - WCF REST服务的客户端JSON

时间:2015-08-22 15:17:25

标签: c# .net json wcf rest

我尝试为我找到的WCF REST服务创建一个简单的客户端 here.

我添加了服务参考,我写了这段代码:

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.Book'无法序列化   JSON,因为其IsReference设置为“True”。 JSON格式的确如此   不支持引用,因为没有标准格式   代表参考。要启用序列化,请禁用   IsReference设置类型或适当的父类   类型。

当我在浏览器中运行“http://localhost:53215/IBookService.svc/GetBooksNames”时,我得到了这些书:

  

“[”MVC音乐商店 - 教程 -   v3.0“,”Pro.ASP.NET.MVC.3.Framework“,”应用程序架构指南“   v2“,”Gang of Four Design Patterns“,”CS4 Pocket Reference“]”

有什么问题?

1 个答案:

答案 0 :(得分:0)

似乎实体框架在添加属性DataContract时包含属性null

因此,我建议您在项目中包含JSON.Net nuget包。 然后将代码修改为:

IsReference = true