反序列化从 json api 继承的类
Posted
技术标签:
【中文标题】反序列化从 json api 继承的类【英文标题】:Deserialize inherited class from json api 【发布时间】:2021-12-25 03:10:19 【问题描述】:我想使用 Xamarin (C#) 反序列化从 json 继承的类
类:
public class AnnuaireTelephonique
public string nom get; set;
public string numero get; set;
public class RootAnnuaireTelephonique : List<AnnuaireTelephonique>
public string nomCategorie get; set;
public List<AnnuaireTelephonique> liste => this;
我使用继承的类来显示它,然后使用分组的 listView 但是当我使用以下代码反序列化时,它不起作用并导致应用程序崩溃
var annuaireTelephoniqueJson = JsonConvert.DeserializeObject<List<RootAnnuaireTelephonique>>(ReadData(annuaireTelephoniqueFileName) /*correct json*/);
AnnuaireTelephonique = new ObservableCollection<RootAnnuaireTelephonique>(annuaireTelephoniqueJson);
列表视图:
<ListView ItemsSource=""
IsGroupingEnabled="true"
x:Name="listData"
HasUnevenRows="True"
SeparatorVisibility="None">
<ListView.GroupHeaderTemplate>
<DataTemplate>
<ViewCell>
<Label
Text="Binding nomCategorie"
FontSize="20"
TextColor="Black"
Margin="10"
HorizontalOptions="Center"
VerticalOptions="Start" />
</ViewCell>
</DataTemplate>
</ListView.GroupHeaderTemplate>
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<customButton:CallNumberButton
Text="Binding nom"
NumberToCall="Binding numero"
FontSize="15"
Margin="8"
TextColor="Black"
BackgroundColor="#E6E6E6"
VerticalOptions="Start"
/>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Json 示例:
[ "nomCategorie": "1", “名单”:[ “名义”:“A”, “数字”:“0600000000” , “名义”:“B”, “数字”:“0600000001” , “名义”:“C”, “数字”:“0600000002” ] , "nomCategorie": "2", “名单”:[ “名义”:“D”, “数字”:“0600000003” , “名义”:“E” “数字”:“0600000004” ] ]
【问题讨论】:
【参考方案1】:试试这个
public ObservableCollection<AnnuaireTelephonique> AnnuaireTelephonique get; set;
var annuaireTelephoniqueList =
JsonConvert.DeserializeObject<List<RootAnnuaireTelephonique>>(ReadData(annuaireTelephoniqueFileName);
AnnuaireTelephonique =
new ObservableCollection(annuaireTelephoniqueList[0].AnnuaireTelephonique);
你必须创建类(不要进行继承!)
public class RootAnnuaireTelephonique
public string nomCategorie get; set;
public List<AnnuaireTelephonique> AnnuaireTelephonique get; set;
public class AnnuaireTelephonique
public string nom get; set;
public string numero get; set;
和屏幕
ItemsSource="Binding AnnuaireTelephonique"
【讨论】:
这行得通,但要使用带有组的 listView,我必须通过继承,看来 @Rtinox 我可以看到您的 xaml,但我不明白您为什么需要继承。没有人继承该列表。请不要忘记接受答案,因为它很有用。您可以通过单击我的答案侧的复选标记来完成。 我们有同样的问题,文档要求进行继承,所以我这样做了? docs.microsoft.com/fr-fr/xamarin/xamarin-forms/user-interface/…以上是关于反序列化从 json api 继承的类的主要内容,如果未能解决你的问题,请参考以下文章