我有一个Windows Phone 7应用程序(使用Visual Studio 2010 + Windows Phone开发人员工具用C#编写),它使用来自Web服务的数据。
在过去,我使用的SOAP非常简单(作为服务引用添加,我基本上准备好了)但现在我想使用JSON。
API提供SOAP和RESTful JSON端点,两个端点都提供相同的数据。
现在我的问题:
1)我从SOAP切换到JSON的主要动机是JSON应该更快(响应更小)。这是对的吗?
2)如何在项目中使用JSON端点?我已经尝试将其添加为服务参考,但要么我错过了一些或者这是不可能的。
我是JSON的绝对初学者,所以欢迎任何形式的帮助。
答案 0 :(得分:4)
每当您获得优化并开始研究解决方案时,深呼吸是一件好事,列出一些从消费者和服务器角度准确描述您想要的内容。准备好在适当的时候做出让步,但不要让自己偏离你的要求太远。
嗯 - 我很高兴你问过!
我一直在使用ServiceStack ...堆栈生产一年中的大部分时间。事实上,它是我的iOS应用程序的默认提供程序,因为它非常多才多艺。基本上,您可以在一个实现中获得REST + SOAP,以及一些非常好的优化。
https://github.com/mythz/ServiceStack.Text
此外,API使JSON非常容易。
var customer = new Customer { Name="Joe Bloggs", Age=31 };
var json = JsonSerializer.SerializeToString(customer);
var fromJson = JsonSerializer.DeserializeFromString<Customer>(json);
[在这里插入无偿2快速2愤怒的笑话......]
确实是的。我是Demis Bellot [mythz]及其作品的忠实粉丝,实际上他现在正在StackOverflow工作。足以说,他是一个表演者。优化问题,所以如果事情很慢,你几乎可以肯定它不是他的代码就是问题:-P
以下是润湿喙的一些基准:
http://www.servicestack.net/mythz_blog/?p=344
http://daniel.wertheim.se/2011/02/07/json-net-vs-servicestack/
答案 1 :(得分:0)
JSON可以更快,当然取决于服务器。通常JSON会产生较小的响应,因为它在响应中没有那些xml标记。
使用(未受保护的)JSON提要,您可以使用WebClient类:
public void GetData()
{
var client = new WebClient();
client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_GetDataCompleted);
client.OpenReadAsync(new Uri(_address));
}
void client_GetDataCompleted(object sender, OpenReadCompletedEventArgs e)
{
var serializer = new DataContractJsonSerializer(typeof(JSONDataObject),null);
var data = serializer.ReadObject(e.Result) as JSONDataObject;
//do what you need with the data
}
[DataContract(Name = "JSONDataObject")]
public class JSONDataObject
{
[DataMember(Name = "id", Order = 0)]
public int Id
{
get;set;
}
[DataMember(Name = "name", Order = 1, EmitDefaultValue = false)]
public string Name
{
get;set;
}
}
我简化了一些代码,但我只使用核心功能,所以通过一些研究你会没事的。关键类是WebClient,DataContractJsonSerializer,DataContract,DataMember,它们都在MSDN上有详细记录。