我的 IsolatedStorageSettings 中已将ObservableCollection<Recipe>
保存为 JSON 字符串。
班级Recipe
有一个名为Category
的字段,该字段由以下代码初始化:
[JsonProperty]
private Category _category = RecipesViewModel.BaseCategories.First();
Category
是这样的:
[JsonProperty]
public Categories BaseCategory;
/// <summary>
/// Background picture for the cagtegory
/// </summary>
public string Picture
{
get { return string.Format(@"/Assets/CategoriesPictures/{0}.jpg", BaseCategory); }
}
/// <summary>
/// Category's name
/// </summary>
public string Name
{
get { return BaseCategory.ToString(); }
}
/// <summary>
/// List of recipes that belong to this category
/// </summary>
public IEnumerable<Recipe> Recipes
{
get { return App.ViewModel.GetRecipesByCategory(this); }
}
/// <summary>
/// We need this to let everyone know that something may have been changed in our collections
/// </summary>
public void UpdateCategory()
{
RaisePropertyChanged(() => Recipes);
}
其中BaseCategory
是一个简单的枚举
public enum Categories
{
Breakfast,
Lunch,
Appetizer,
Sidedish,
Soup,
Dessert,
Beverages
}
目前我的Recipe
只有一个ObservableCollection<Recipe>
,这是 JSON ,它保存在 IsolatedStorageSettings 中:< / p>
[
{
"_addedDate": "2013-11-10T19:08:00.8968706+01:00",
"_category": {
"BaseCategory": 2
},
"_ingredients": [],
"_recipeName": "recipeName",
"_steps": [],
"_temperature": 0.0
}
]
BaseCategories
被声明为
public static ReadOnlyCollection<Category> BaseCategories { get; private set; }
它是通过这种方法构建的:
private static void BuildCategories()
{
var categories = new ObservableCollection<Category>();
foreach (var enumValue in from category in typeof(Categories).GetFields()
where category.IsLiteral
select (Categories)category.GetValue(typeof(Categories)))
{
categories.Add(new Category { BaseCategory = enumValue });
}
BaseCategories = new ReadOnlyObservableCollection<Category>(categories);
}
在我的数据加载方法中,BaseCategories
的第一个元素成为 JSON 中写的Category
。
在这种情况下,它从 Breakfast 转到 Appetizer (这是唯一保存的Category
的{{1}}。
这是我用来加载数据的代码:
Recipe
有谁知道那里发生了什么?
我整天都在研究这段代码,所以现在我的头已经不见了!
答案 0 :(得分:0)
似乎非常熟悉ASP.NET。关于方法。您是否注意到“jsonString”变量为空?你试图从可序列化的json对象中获取一些东西,而“something”是空的。并尝试使用显式类型转换为Recipce的类型。
答案 1 :(得分:0)
首先,我建议在视图模型中使用正确的注释属性:整个对象上的[DataContract],属性上的[DataMember],应该被序列化,属性上的[IgnoreDataMember],应该被忽略JSON.net。
类Category也应该使用标准属性,这些属性在特定方法中使用适当的值进行初始化,而不是使用硬编码的getter:
public Categories BaseCategory { get; set; }
public string Picture { get; set; }
public string Name { get; set; }
public IEnumerable<Recipe> Recipes { get; set; }
在您的食谱中使用序列化的BaseCategory和IgnoreDataMember类别:
[DataMember]
public Categories BaseCatagory { get; set; }
[IgnoreDataMember]
public Category Category { get; set; }
如果它有任何帮助,请告诉我。