【问题标题】:Using RestSharp in Windows Phone 7在 Windows Phone 7 中使用 RestSharp
【发布时间】:2011-05-04 12:36:26
【问题描述】:

我正在尝试在 Windows Phone 7 项目中使用 RestSharp (http://restsharp.org/),但我遇到了 RestSharp 使用的 Newtonsoft Json.NET 库的问题。当我尝试像这样执行我的代码时:

_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; }
}

【问题讨论】:

  • 你不是第一个遇到这个问题的人。您可以发布您尝试使用的 JSON 和 C# 类吗?
  • 添加到原帖中,希望可以解决,因为DataContractJsonSerializer 对我来说并不是那么好。

标签: windows-phone-7 restsharp


【解决方案1】:

您不需要任何 [DataMember] 属性,RestSharp 不使用它们。

由于返回的 JSON 是一个数组,所以需要将其反序列化为一个数组:

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

【讨论】:

  • 这似乎也不起作用。我仍然遇到与List&lt;Song&gt; 相同的错误:"Could not load type 'Newtonsoft.Json.Linq.JArray' from assembly 'Newtonsoft.Json.Compact, Version=3.5.0.0, Culture=neutral, PublicKeyToken=30AD4FE6B2A6AEED'." 可能是因为RestSharp 不使用[DataMember] 属性,所以它不会从JSON id 转换为我自己的属性名称吗? IE。 title-&gt;TitlenameWithoutThePrefix-&gt;Name,从而导致错误?
  • 名字是自动翻译的github.com/johnsheehan/RestSharp/wiki/Deserialization你能不能在非WP7项目里试试看能不能用?
  • 让我看看我是否理解正确:我的类是否需要具有与 JSON 属性一样的确切命名,或者它是否使用 [DataMember] 属性将 JSON 中的名称链接到我的类属性名称?我会尝试一个非 WP7 项目,如果它有效,我会告诉你。
  • RestSharp 进行自动名称匹配。例如,对于“nameWithoutThePrefix”元素,您的属性需要命名为 NameWithoutThePrefix。我早期发送的链接显示了匹配名称所经历的所有步骤。
  • 所以我在 Silverlight 项目中进行了尝试,并在 RestSharp.cs 中的 GetHandler 方法中遇到错误(使用完全相同的代码):NullReferenceException var semicolonIndex = contentType.indexOf(';');contentType 似乎是 null 这里。我还在使用相同代码的 Windows 窗体应用程序中进行了尝试,这似乎用正确的数据填充了我的 response.Data 属性,所以我现在假设这是 RestSharp 的 Silverlight/Windows Phone 组件的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-14
相关资源
最近更新 更多