2010-08-21 124 views
3

我试图在Windows Phone 7项目中使用RestSharp(http://restsharp.org/),但我遇到了一个问题,它似乎与RestSharp使用的Newtonsoft Json.NET库有关。当我试图执行像这样我的代码:在Windows Phone 7中使用RestSharp

_restClient.ExecuteAsync<Model.Song>(restRequest, (response) => 
{ 
    if (response.StatusCode == HttpStatusCode.OK) { } 
    else { } 
}); 

,我发现了以下错误:

Could not load type 'Newtonsoft.Json.Linq.JArray' from assembly 'Newtonsoft.Json.Compact, Version=3.5.0.0, Culture=neutral, PublicKeyToken=30AD4FE6B2A6AEED'.

Newtonsoft.Json.Compact.dll被复制到我的Windows Phone 7应用程序的Bin文件夹,所以我假设它被部署到设备上,但不知何故它不会加载它。有没有人遇到/解决过类似的问题?谢谢。


按照要求,JSON的例子:[{"type":"Song","id":60097,"title":"A Place Where You Belong","artist":{"type":"Artist","id":17,"nameWithoutThePrefix":"Bullet For My Valentine","useThePrefix":false}}]

及其类别:

[DataContract] 
public class Song 
{ 
    [DataMember(Name = "id")] 
    public int Id { get; set; } 

    [DataMember(Name = "title")] 
    public string Title { get; set; } 

    [DataMember(Name = "artist")] 
    public Artist Artist { get; set; } 
} 

[DataContract] 
public class Artist 
{ 
    [DataMember(Name = "id")] 
    public int Id { get; set; } 

    [DataMember(Name = "nameWithoutThePrefix")] 
    public string Name { get; set; } 

    [DataMember(Name = "useThePrefix")] 
    public bool UsePrefix { get; set; } 
} 
+0

你不是第一个拿到这个问题。你可以发布你试图使用的JSON和C#类吗? – 2010-08-21 18:58:42

+0

添加到原始文章,希望这是可以解决的问题,因为'DataContractJsonSerializer'对我来说真的不是很好。 – RajenK 2010-08-22 06:34:04

回答

3

你不需要任何的[DataMember]属性的,他们不使用RestSharp 。

由于JSON返回的是一个数组,你需要反序列化到一个数组:

client.ExecuteAsync<List<Song>>(request, callback); 
+0

这似乎并没有伎俩。 'List '仍然出现同样的错误:''无法从程序集'Newtonsoft.Json.Compact,Version = 3.5.0.0,Culture = neutral,PublicKeyToken ='加载类型'Newtonsoft.Json.Linq.JArray' 30AD4FE6B2A6AEED'。'' 它可能是因为RestSharp不使用'[DataMember]'属性,它不会从JSON ID转换到我自己的属性名称? IE浏览器。 'title-> Title','nameWithoutThePrefix-> Name',从而导致错误? – RajenK 2010-08-27 09:12:25

+0

名称被自动翻译http://github.com/johnsheehan/RestSharp/wiki/Deserialization 您可以在非WP7项目中试用它,并告诉我它是否有效? – 2010-08-27 19:21:39

+0

让我看看我是否理解正确:我的类是否需要具有与JSON属性完全相同的命名,还是使用'[DataMember]'属性将JSON名称链接到我的类属性名称?我会尝试一个非WP7项目,并会告诉你它是否有效。 – RajenK 2010-08-30 18:29:28