我尝试为我找到的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口袋参考"],
有什么问题吗?
似乎实体框架包括属性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)
//{
//}
}