Windows Phone 8.1 JsonObject JSON数据存储

network | | 访问(53)
<StackPanel>
    <TextBlock Text="填写你的个人你信息" FontSize="20"></TextBlock>
    <TextBox x:Name="userName" Header="名字:"></TextBox>
    <TextBox x:Name="userAge" Header="年龄:" InputScope="Number"></TextBox>
    <TextBlock Text="就读过的学校:" FontSize="20"></TextBlock>
    <CheckBox Content="哈尔滨佛教学院" x:Name="school1"></CheckBox>
    <CheckBox Content="蓝翔职业技术学院" x:Name="school2"></CheckBox>
    <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
        <Button Content="保存" x:Name="save" Click="save_Click"></Button>
        <Button Content="获取保存的信息" x:Name="get" Click="get_Click"></Button>
    </StackPanel>
    <TextBlock x:Name="info" TextWrapping="Wrap" FontSize="20"></TextBlock>
</StackPanel>
public sealed partial class MainPage: Page {
    private ApplicationDataContainer _appSettings;
    private const string UserDataKey = "UserDataKey";
    public MainPage() {
        this.InitializeComponent();
        _appSettings = ApplicationData.Current.LocalSettings;
    }

    private async void save_Click(object sender, RoutedEventArgs e) {
        if (userName.Text == "" || userAge.Text == "") {
            await new MessageDialog("请输入完整的信息").ShowAsync();
            return;
        }
        ObservableCollection < School > education = new ObservableCollection < School > ();
        if (school1.IsChecked == true) {
            education.Add(new School {
                Id = "id001",
                Name = school1.Content.ToString()
            });
        }
        if (school2.IsChecked == true) {
            education.Add(new School {
                Id = "id002",
                Name = school2.Content.ToString()
            });
        }
        User user = new User {
            Education = education,
            Id = Guid.NewGuid().ToString(),
            Name = userName.Text,
            Age = Int32.Parse(userAge.Text),
            Verified = false
        };
        //string json=ToJsonData(user);
        string json = user.Stringify();
        info.Text = json;
        _appSettings.Values[UserDataKey] = json;
        await new MessageDialog("保存成功").ShowAsync();
    }

    private async void get_Click(object sender, RoutedEventArgs e) {
        if (!_appSettings.Values.ContainsKey(UserDataKey)) {
            await new MessageDialog("未保存信息").ShowAsync();
            return;
        }
        string json = _appSettings.Values[UserDataKey].ToString();
        //User user = DataContractJsonDeSerializer<User>(json);
        User user = new User(json);
        string userInfo = "";
        userInfo = "Id:" + user.Id + " Name:" + user.Name + " Age:" + user.Age;
        foreach(var item in user.Education) {
            userInfo += " Education:" + "Id:" + item.Id + " Name:" + item.Name;
        }
        await new MessageDialog(userInfo).ShowAsync();
    }

    public T DataContractJsonDeSerializer < T > (string jsonString) {
        var ds = new DataContractJsonSerializer(typeof(T));
        var ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
        T obj = (T) ds.ReadObject(ms);
        ms.Dispose();
        return obj;
    }

    public string ToJsonData(object item) {
        DataContractJsonSerializer serializer = new DataContractJsonSerializer(item.GetType());
        string result = String.Empty;
        using(MemoryStream ms = new MemoryStream()) {
            serializer.WriteObject(ms, item);
            ms.Position = 0;
            using(StreamReader reader = new StreamReader(ms)) {
                result = reader.ReadToEnd();
            }
        }
        return result;
    }
}
public class School {
    private const string idKey = "id";
    private const string schoolKey = "school";
    private const string nameKey = "name";

    public School() {
        Id = "";
        Name = "";
    }

    public School(JsonObject jsonObject) {
        JsonObject schoolObject = jsonObject.GetNamedObject(schoolKey, null);
        if (schoolObject != null) {
            Id = schoolObject.GetNamedString(idKey, "");
            Name = schoolObject.GetNamedString(nameKey, "");
        }
    }

    public JsonObject ToJsonObject() {
        JsonObject schoolObject = new JsonObject();
        schoolObject.SetNamedValue(idKey, JsonValue.CreateStringValue(Id));
        schoolObject.SetNamedValue(nameKey, JsonValue.CreateStringValue(Name));

        JsonObject jsonObject = new JsonObject();
        jsonObject.SetNamedValue(schoolKey, schoolObject);
        return jsonObject;
    }

    public string Id {
        get;
        set;
    }
    public string Name {
        get;
        set;
    }
}
public class User {
    private const string idKey = "id";
    private const string nameKey = "name";
    private const string educationKey = "education";
    private const string ageKey = "age";
    private const string verifiedKey = "verified";

    public User() {
        Id = "";
        Name = "";
        Education = new ObservableCollection < School > ();
    }

    public User(string jsonString) : this() {
        JsonObject jsonObject = JsonObject.Parse(jsonString);
        Id = jsonObject.GetNamedString(idKey, "");
        Name = jsonObject.GetNamedString(nameKey, "");
        Age = jsonObject.GetNamedNumber(ageKey, 0);
        Verified = jsonObject.GetNamedBoolean(verifiedKey, false);

        foreach(IJsonValue jsonValue in jsonObject.GetNamedArray(educationKey, new JsonArray())) {
            if (jsonValue.ValueType == JsonValueType.Object) {
                Education.Add(new School(jsonValue.GetObject()));
            }
        }
    }

    public string Stringify() {
        JsonArray jsonArray = new JsonArray();
        foreach(School school in Education) {
            jsonArray.Add(school.ToJsonObject());
        }

        JsonObject jsonObject = new JsonObject();
        jsonObject[idKey] = JsonValue.CreateStringValue(Id);
        jsonObject[nameKey] = JsonValue.CreateStringValue(Name);
        jsonObject[educationKey] = jsonArray;
        jsonObject[ageKey] = JsonValue.CreateNumberValue(Age);
        jsonObject[verifiedKey] = JsonValue.CreateBooleanValue(Verified);

        return jsonObject.Stringify();
    }

    public string Id {
        get;
        set;
    }
    public string Name {
        get;
        set;
    }
    public ObservableCollection < School > Education {
        get;
        set;
    }
    public double Age {
        get;
        set;
    }
    public bool Verified {
        get;
        set;
    }
}