json 反序列化文化名称中性,不支持 PublicKeyToken=null。 Xamarin Forms C#

问题描述 投票:0回答:1

我正在尝试将列表保存到 xaamarin 表单中的首选项。我成功地序列化了我的列表,但我在反序列化时遇到了问题。

public class FlyoutItemPage
    {
        public FlyoutItemPage(string title, Type targetPage)
        { this.TargetPage = targetPage;
            this.Title = title;
        }
        public string Title { get; set; }
        public Type TargetPage { get; set; }  }
}

我在用户单击按钮时序列化 FlyoutItemPage 项目列表。

private async void menuItemFavButton_Clicked(object sender, EventArgs e)
        {
            var menuItem = (MenuItem)sender;
            var myPage = menuItem.CommandParameter as FlyoutItemPage;

            FlyoutItemPage f = new FlyoutItemPage(myPage.Title, myPage.TargetPage);
            ObservableCollection<FlyoutItemPage> flyoutItemPages = new ObservableCollection<FlyoutItemPage>();
            flyoutItemPages.Add(f);
            
            var json = JsonConvert.SerializeObject(flyoutItemPages);
            Preferences.Set("favorites", json);
        }

那是我的列表来自 json,我尝试反序列化它。

[{"Title":"Depo Aktarım","TargetPage":"İdaServis.View.DepoAktarımPage, İdaServis, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"}]

我在其他页面的 OnAppearing 方法上反序列化该列表。

protected override void OnAppearing()
        {
            base.OnAppearing();

            try
            {
                var json = Preferences.Get("favorites", "");
                if (json == null) new ObservableCollection<FlyoutItemPage>();
                Console .WriteLine(json.ToString());
               
                
                **ObservableCollection<FlyoutItemPage> flyoutItemPages =  JsonConvert.DeserializeObject<ObservableCollection<FlyoutItemPage>>(json);**
              
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
            
        }

但它给了我这个错误:

**System.Globalization.CultureNotFoundException:** 'Culture name neutral, PublicKeyToken=null is not supported. Parameter name: name' 

我该如何解决这个问题?

我想制作一个最喜欢的列表弹出页面,并将此列表设置为主页内的列表视图。然后用户可以轻松访问最喜欢的页面。

json xamarin.forms serialization json.net deserialization
1个回答
0
投票

你的班级应该是

public class FlyoutItemPage
{
    public FlyoutItemPage(string title, string targetPage)
    {
        this.TargetPage = Type.GetType(targetPage);
        this.Title = title;
    }
    public string Title { get; set; }
    public Type TargetPage { get; set; }
}

但是如果您没有定义类型的任何 DLL,TargetPage 将始终为 null。

© www.soinside.com 2019 - 2024. All rights reserved.