反序列化从 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 继承的类的主要内容,如果未能解决你的问题,请参考以下文章

Jackson - 使用泛型类反序列化

C#中通过XmlSerializer类反序列化多个同名XML元素

将类反序列化为文件并返回列表

PHP原生类反序列化

Boost 将派生类反序列化为基类指针

反序列化从 Json 继承的 ReactiveObject 的对象不起作用