【问题标题】:Deserialize inherited class from json api反序列化从 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” } ] } ]

【问题讨论】:

    标签: android json xamarin


    【解决方案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/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多