【发布时间】:2021-02-27 06:55:39
【问题描述】:
我正在构建一个 Xamarinforms 应用程序,该应用程序使用 web 服务 api 来填充数据与权力的游戏演员。 API 将使用演员姓名、图片和舞台名称填写应用程序。
我正在尝试
解析 json 并反序列化为 CharacterClass 的 ObservableCollection
(从此函数返回 Task
这是我得到的错误
无法将当前 JSON 对象(例如 {"name":"value"})反序列化为类型 'System.Collections.ObjectModel.ObservableCollection`1[GOTapp.CharacterClass]' 因为该类型需要 JSON 数组(例如 [1 ,2,3]) 以正确反序列化。 要修复此错误,要么将 JSON 更改为 JSON 数组(例如 [1,2,3]),要么将反序列化类型更改为普通的 .NET 类型(例如,不是像整数这样的原始类型,而不是像这样的集合类型可以从 JSON 对象反序列化的数组或列表。 JsonObjectAttribute 也可以添加到类型中以强制它从 JSON 对象反序列化。 路径“字符”,第 2 行,位置 16。
namespace GOTapp
{
public class CharactersManager
{
public ObservableCollection<CharacterClass> characterList
{
get;
set;
}
public class LogInResult
{
public string Name { get; set; }
public string cityName { get; set; }
public string img { get; set; }
public string usrId { get; set; }
}
public string url = "https://raw.githubusercontent.com/jeffreylancaster/game-of-thrones/master/data/characters.json";
HttpClient client = new HttpClient();
public async Task<ObservableCollection<CharacterClass>> downloadData()
{
// Get data from provided web service
// parse json and deserialize it to ObservableCollection of CharacterClass
// return Task<ObservableCollection<CharacterClass>> from this function
var json = await client.GetStringAsync(url);
characterList = JsonConvert.DeserializeObject<ObservableCollection<CharacterClass>>(json);
return characterList;
}
public void postActor()
{
var character = new CharacterClass
{
characterImageThumb = "https://images-na.ssl-images-amazon.com/images/M/MV5BNzI5MDg0ZDAtN2Y2ZC00MzU1LTgyYjQtNTBjYjEzODczZDVhXkEyXkFqcGdeQXVyNTg0Nzg4NTE@._V1._SX100_SY140_.jpg",
characterName = "Aeron Greyjoy",
actorName = "Michael Feast"
};
var content = JsonConvert.SerializeObject(character);
client.PostAsync(url, new StringContent(content));
}
}
}
这里是json的格式
{
"characters":[
{
"characterName":"Addam Marbrand",
"characterLink":"/character/ch0305333/",
"actorName":"B.J. Hogg",
"actorLink":"/name/nm0389698/"
},
{
"characterName":"Aegon Targaryen",
"houseName":"Targaryen",
"royal":true,
"parents":[
"Elia Martell",
"Rhaegar Targaryen"
],
"siblings":[
"Rhaenys Targaryen",
"Jon Snow"
],
"killedBy":[
"Gregor Clegane"
]
}
]
}
这里是json数据的链接 https://raw.githubusercontent.com/jeffreylancaster/game-of-thrones/master/data/characters.json
我将不胜感激任何形式的帮助
这是我的主页
namespace GOTapp
{ 公共部分类 MainPage : ContentPage {
public ObservableCollection<CharacterClass> downloadedList;
public CharactersManager manager = new CharactersManager();
public MainPage()
{
InitializeComponent();
actorlist.RowHeight = 50;
}
protected async override void OnAppearing()
{
if (downloadedList.Count == 0)
{
actorlist.ItemsSource = null;
// call downloadData function from here.
var list = await manager.downloadData();
downloadedList = new ObservableCollection<CharacterClass>(list);
actorlist.ItemsSource = downloadedList;
}
base.OnAppearing();
}
void actorlist_ItemSelected(System.Object sender, Xamarin.Forms.SelectedItemChangedEventArgs e)
{
// navigate to Detail Page and passing the selected character to detail page.
manager.postActorList();
}
}
}
这是我的。字符类.cs
using System;
namespace GOTapp
{
public class CharacterClass
{
public int id { get; set; }
public string characterName { get; set; }
public string actorName { get; set; }
public string characterImageThumb { get; set; }
public CharacterClass()
{
}
// Version 2: add integer attribute for rating.
}
}
【问题讨论】:
-
从
ObservableCollection改成IList -
指令要求返回 Task
>。这有关系吗? -
你想看看我的角色等级吗?
标签: c# json api json-deserialization