无法将数据存储到本地XML文件

时间:2015-03-02 02:34:44

标签: c# xml

我有以下代码,我试图用来保存和加载手机设置XML文件中的数据(通过PCL中的界面访问来电)

// caller

public void SetStringValue(string name, string val)
    {
        UserData.SetPropertyValue(this, name, val);
    }

// userdata file

namespace PreferencesXML.iOS
{
public static class UserData
{
    public static object GetPropertyValue(object data, string propertyName)
    {
        return data.GetType().GetProperties().SingleOrDefault(pi => pi.Name == propertyName).GetValue(data, null);
    }

    public static void SetPropertyValue<T>(object data, string propertyName, T value)
    {
        data.GetType().GetProperties().SingleOrDefault(pi => pi.Name == propertyName).SetValue(data, value);
    }

    private static string pUserSettingsFile;

    private static UserSetting userSetting;

    public static UserSetting UserSetting
    {
        get
        {
            if (userSetting == null)
            {
                if (File.Exists(UserSettingsFile))
                {
                    userSetting = Serialiser.XmlDeserializeObject<UserSetting>(UserSettingsFile);
                }
                else
                {
                    userSetting = new UserSetting();
                    Serialiser.XmlSerializeObject(userSetting, UserSettingsFile);
                }
            }

            return userSetting;
        }

        set
        {
            if (value == null)
            {
                throw new ArgumentNullException("value is null!");
            }
            // end if

            userSetting = value;
            if (File.Exists(UserSettingsFile))
            {
                File.Delete(UserSettingsFile);
            }

            Serialiser.XmlSerializeObject(userSetting, UserSettingsFile);
        }
    }

    public static string UserSettingsFile
    {
        get
        {
            if (string.IsNullOrEmpty(pUserSettingsFile))
            {
                pUserSettingsFile = Path.Combine(AppDelegate.Self.ContentDirectory, "UserSettings.xml");
            }

            return pUserSettingsFile;
        }
    }

    public static string Company
    {
        get
        {
            return UserSetting.companyName;
        }

        set
        {
            UserSetting settings = UserSetting;
            settings.companyName = value;
            UserSetting = settings;
        }
    }

    public static double Pi
    {
        get
        {
            return UserSetting.pi;
        }

        set
        {
            UserSetting settings = UserSetting;
            settings.pi = value;
            UserSetting = settings;
        }
    }

    public static bool OnOff
    {
        get
        {
            return UserSetting.onOff;
        }

        set
        {
            UserSetting settings = UserSetting;
            settings.onOff = value;
            UserSetting = settings;
        }
    }
}

public class UserSetting
{
    public string companyName{ get; set; }

    public double pi{ get; set; }

    public bool onOff{ get; set; }
}
}

正如你所看到的,它没有做任何令人难以置信的事情。读者部分工作正常,但SetPropertyValue不断在SingleOrDefault返回失败。

这取决于调用者扩展方法,它扩展了调用者所在的类而不是UserData类。

由于UserData类是静态的,我无法创建它的对象实例并将其传递给代替this参数,也不能直接传递UserData或作为通用参数(例如this.SetPropertyValue<UserData>(...))。我试图让这个类非静态,这让我更进一步,但并不多。

有没有办法可以使用这段代码在我的UserData类中存储数据?

0 个答案:

没有答案