Xamarin.Forms WebAPI JsonConverter.DeserializeObject未处理的异常

时间:2017-08-21 13:45:03

标签: c# json api xamarin serialization

我试图在MoshHamedani的Xamarin Forms课程中复制该功能。 这是我的代码(使用有效的,工作的_url,返回带有转义字符的json对象):

public partial class PartnersListPage : ContentPage
  {
    private const string _url = "xyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyz";
    private HttpClient _httpClient = new HttpClient();
    private ObservableCollection<Partner> _partners;

    public PartnersListPage()
    {
      InitializeComponent();
    }

    protected override async void OnAppearing()
    {
      var jsonObject = await _httpClient.GetStringAsync(_url);
      var dotNetObject = JsonConvert.DeserializeObject<List<Partner>>(jsonObject);

      _partners = new ObservableCollection<Partner>(dotNetObject);

      partnersListView.ItemsSource = _partners;

      base.OnAppearing();
    }

Partner.cs看起来像这样:

public class Partner
  {
    //public int Id { get; set; }
    //public string Name { get; set; }
    public string ImageUrl { get; set; }
    public string WebUrl { get; set; }
  }

邮递员返回以下内容:

{
    "partners": [
        {
            "imageUrl": "http://www.abcdefgh.xy//media/1007/3.jpg",
            "webUrl": "http://www.abcdefgh.xy/"
        },
        {
            "imageUrl": "http://www.ijklmnop.xy//media/1009/5.jpg",
            "webUrl": "https://www.ijklmnop.xy/xy"
        },
        {
            "imageUrl": "http://www.qrstuvxy.xy//media/2623/slsp.svg",
            "webUrl": "https://www.qrstuvxy.xy/"
        }
    ]
}

当我点击JsonConvert.DeserializeObject行时,我得到以下内容: 发生了未处理的异常。 为什么不起作用?

2 个答案:

答案 0 :(得分:2)

您使用不正确的类型(List<Partner>)进行反序列化 我正在使用Json to c#转换器来确定我需要的类 - 只需粘贴你的json文本/数据,然后就会为你生成类。有关json文本/数据的示例,您需要:

public class Partner
{
    public string imageUrl { get; set; }
    public string webUrl { get; set; }
}

public class RootObject
{
    public List<Partner> partners { get; set; }
} 

........

var result = JsonConvert.DeserializeObject<RootObject>(jsonObject);

答案 1 :(得分:1)

控制器返回单个对象但您正在尝试对阵列进行反序列化

X

和..

public class Partner
  {
    //public int Id { get; set; }
    //public string Name { get; set; }
    public string ImageUrl { get; set; }
    public string WebUrl { get; set; }
  }

public class ApiResult
{
    List<Partner> Partners {get;set;}
}