C# I';我无法保存到隔离存储?

C# I';我无法保存到隔离存储?,c#,windows-phone-7,isolatedstorage,C#,Windows Phone 7,Isolatedstorage,我正在尝试将我的模型保存在独立存储中: var settings = IsolatedStorageSettings.ApplicationSettings; CurrentPlaceNowModel model = new CurrentPlaceNowModel(); settings.TryGetValue<CurrentPlaceNowModel>("model", out model); if (model == null) { MessageBox.Show

我正在尝试将我的模型保存在独立存储中:

var settings = IsolatedStorageSettings.ApplicationSettings;

CurrentPlaceNowModel model = new CurrentPlaceNowModel();

settings.TryGetValue<CurrentPlaceNowModel>("model", out model);

if (model == null)
{
    MessageBox.Show("NULL");
    settings.Add("model", new CurrentPlaceNowModel());
    settings.Save();
}
else
    MessageBox.Show("NOT NULL");
var设置=隔离存储设置。应用设置;
CurrentPlaceNowModel=新的CurrentPlaceNowModel();
设置.TryGetValue(“模型”,输出模型);
if(model==null)
{
MessageBox.Show(“空”);
添加(“模型”,新的CurrentPlaceNowModel());
设置。保存();
}
其他的
MessageBox.Show(“非空”);
当我启动emu时,我当然会看到“NULL”,但如果我关闭emu上的应用程序并从菜单中再次启动它(而不是在Visual Studio中再次启动),为什么我会一直看到它


我是否应该第二次得到“not NULL”?

我刚刚注意到你做错了什么:

if (model == null)
{
    MessageBox.Show("NULL");
    settings.Add("model", model);
}
这相当于调用
settings.Add(“model”,null)
——那么您希望以后如何获得非null值呢?我怀疑你想要:

CurrentPlaceNowModel model;

if (!settings.TryGetValue<CurrentPlaceNowModel>("model", out model))
{
    model = new CurrentPlaceNowModel();
    settings.Add("model", model);
}
CurrentPlaceNowModel模型;
如果(!settings.TryGetValue(“model”,out model))
{
模型=新的CurrentPlaceNowModel();
设置。添加(“模型”,模型);
}

我刚刚注意到你做错了什么:

if (model == null)
{
    MessageBox.Show("NULL");
    settings.Add("model", model);
}
这相当于调用
settings.Add(“model”,null)
——那么您希望以后如何获得非null值呢?我怀疑你想要:

CurrentPlaceNowModel model;

if (!settings.TryGetValue<CurrentPlaceNowModel>("model", out model))
{
    model = new CurrentPlaceNowModel();
    settings.Add("model", model);
}
CurrentPlaceNowModel模型;
如果(!settings.TryGetValue(“model”,out model))
{
模型=新的CurrentPlaceNowModel();
设置。添加(“模型”,模型);
}

我会以不同的方式执行此操作,并进行特定的检查以查看密钥是否存在

CurrentPlaceNowModel model; 

using (var settings = IsolatedStorageSettings.ApplicationSettings)
{
    if (settings.Contains("MODEL"))
    {
        model = settings["MODEL"] as CurrentPlaceNowModel;
    }
    else
    {
        model = new CurrentPlaceNowModel();
        settings.Add("MODEL", model);    
        settings.Save();
    }
}
使用隔离存储的这种模式肯定有效

如果无法使用DataContractSerializer对
CurrentPlaceNowModel
进行序列化,则这将无法工作。这是ApplicationSettings在内部用于序列化对象的内容。

您可以通过自己将其序列化来测试这一点,看看会发生什么情况。

我会以不同的方式进行测试,并进行特定的检查以查看密钥是否存在

CurrentPlaceNowModel model; 

using (var settings = IsolatedStorageSettings.ApplicationSettings)
{
    if (settings.Contains("MODEL"))
    {
        model = settings["MODEL"] as CurrentPlaceNowModel;
    }
    else
    {
        model = new CurrentPlaceNowModel();
        settings.Add("MODEL", model);    
        settings.Save();
    }
}
使用隔离存储的这种模式肯定有效

如果无法使用DataContractSerializer对
CurrentPlaceNowModel
进行序列化,则这将无法工作。这是ApplicationSettings在内部用于序列化对象的内容。

您可以通过自己将其序列化来测试这一点,以查看发生了什么。

以及
设置的具体内容?我可以试着猜测,但我不想这样做……设置是var settings=IsolatedStorageSettings.ApplicationSettings;我更新了代码,什么是
设置
?我可以试着猜测,但我不想这样做……设置是var settings=IsolatedStorageSettings.ApplicationSettings;我更新了code@Jason94:您有没有在任何时候调用它的
Save()
?(如果没有,在同一次运行中应该没问题,但它不会持久化…@Jason94:为什么在调用
TryGetValue
之前,您更改了我提供的代码以调用
CurrentPlaceNowModel
?这是毫无意义的。这不会造成任何伤害,但毫无意义。如果在重新运行应用程序时查看调试器中的设置会发生什么情况?好的,这不应该是双赢的吗?当我在emu上启动应用程序时,第二次仍然返回NULL:(@Jason94:是的,应该可以-正如我所说的,在调试器的设置中可以看到什么?(我刚刚注意到,如果页面关闭,保存也应该是自动的。)在下面的代码中,我在var foo=key处设置了一个断点:当我调试到手机时,它会停止,告诉键是“model”。但是它没有通过if测试…这对你有帮助吗?:D谢谢你的时间:D@Jason94:您有没有在任何时候调用它的
Save()
?(如果没有,在同一次运行中应该可以,但不会持续…)@Jason94:为什么在调用
TryGetValue
之前更改了我提供的调用
CurrentPlaceNowModel
的代码?这毫无意义。它不会造成任何伤害,但毫无意义。如果在重新运行应用程序时查看调试器中的设置,会发生什么?好的,不应该是双赢的?当我启动应用程序时,第二次仍然返回NULLemu上的应用程序:(@Jason94:是的,应该没问题——正如我所说,你在调试器的设置中看到了什么?(我刚刚注意到,如果页面关闭,保存也应该是自动的。)我在下面的var foo=key处设置了一个断点:当我调试到手机时,它会停止,告诉我键是“model”。但是它没有通过if测试…这对你有帮助吗?:D谢谢你的时间:DDo我需要对CurrentPlaceNowModel做一些事情以使其可序列化?也许这就是问题所在。它只定义为公共类CurrentPlaceNowModel:INotifyPropertyChangedDepending取决于它的功能、包含和支持它可能无法序列化。y可以吗是否显示代码?我是否需要对CurrentPlaceNowModel执行某些操作以使其可序列化?也许这就是问题所在。它仅定义为公共类CurrentPlaceNowModel:INotifyPropertyChangedDepending取决于它的功能、包含和支持它可能无法序列化。是否显示代码?