У меня есть ObservableCollection<Recipe>
сохраненные как строка JSON в моем IsolatedStorageSettings.десериализация и объектные ссылки
Класс 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
является простой Enum
public enum Categories
{
Breakfast,
Lunch,
Appetizer,
Sidedish,
Soup,
Dessert,
Beverages
}
На данный момент я имею только один Recipe
в моем ObservableCollection<Recipe>
, и это JSON, который сохраняется в IsolatedStorageSettings:
[
{
"_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
становится Category
, который написан в JSON.
В этом случае он превращается из завтрака в Закуска (который является Category
единственными сохранено Recipe
).
Это код, который я использую, чтобы загрузить мои данные:
public void LoadData()
{
if (BaseCategories.IsEmpty())
BuildCategories();
// Load data from IsolatedStorage
var jsonString = "";
if (IsolatedStorageSettings.ApplicationSettings.TryGetValue(RecipesKey, out jsonString))
{
// BEFORE THIS LINE EVERYTHING IS FINE
Recipes = JsonConvert.DeserializeObject<ObservableCollection<Recipe>>(jsonString);
// AFTER THIS LINE, THE FIRST CATEGORY IN BaseCategories IS CHANGED
}
UpdateCategories();
IsDataLoaded = true;
}
Кто-нибудь знает, что там происходит?
Я работаю над этим кодом весь день, так что голова уже ушла!
«jsonString» var пуст, потому что он передается в качестве параметра 'out' в эту строку' if (IsolatedStorageSettings.ApplicationSettings.TryGetValue (RecipesKey, out jsonString)) ', который загружает его из' IsolatedStorage' – StepTNT