Я работаю в Windows Phone 7, но я полагаю, что вопрос может быть о Silverlight в целом (но не .NET, поскольку ISerializable
не существует в Windows Phone, как предлагается в этом ответе ).
У меня есть ряд объектов, которые я создаю во время выполнения. В большинстве случаев они всегда будут одинаковыми, за исключением нескольких свойств.
Итак, я бы имел в качестве объекта:
Public Class Article
Public Property Title As String
Public Property Author As String
Public Property HasBeenViewed As Boolean
Public Property DateViewed As Date
Public Property IsPriorityArticle As Boolean
End Class
Я бы хотел написать следующее:
<DataContract()>
Public Class Article
<IgnoreDataMember()> _
Public Property Title As String
<IgnoreDataMember()> _
Public Property Author As String
<DataMember()> _
Public Property HasBeenViewed As Boolean
<DataMember()> _
Public Property DateViewed As Date
<DataMember()> _
Public Property IsPriorityArticle As Boolean
End Class
У меня много объектов article для загрузки при запуске. Примечание. Статьи, загружаемые при запуске, - это статьи only - новые статьи и статьи никогда не удаляются. В объекте Article
изменяются только IsPriorityArticle
, HasBeenViewed
и DateViewed
. Все остальное статично.
Я загружаю эти статьи в List(Of Article)
, и это становится моим источником данных для привязки. Когда пользователь просматривает статьи, он регистрирует время последнего просмотра и эту дату. IsPriorityArticle
может иметь значение true или false, которое может быть изменено пользователем - конечный пользователь может пометить, если он считается важной статьей (в этом случае он будет отображаться на другой странице приоритетных статей), или отменить его как ложный. Если это так, это новое значение должно сохраняться между сеансами.
У меня около 250 статей. Я создаю все это при запуске (опять же, никогда не будет больше или меньше статей).
Пример инициализированных значений:
Public Shared Property MyArticles As IEnumerable(Of Article)
Private Sub Application_Launching(ByVal sender As Object, ByVal e As LaunchingEventArgs)
Dim listOfArticles As New List(Of Article)
With listOfArticles
.Add(New Article With {.Title = "The Internet", .Author = "John", _
.IsPriorityArticle = False})
.Add(New Article With {.Title = "The World", .Author = "Jim", _
.IsPriorityArticle = False})
.Add(New Article With {.Title = "The Universe", .Author = "John", _
.IsPriorityArticle = True})
.Add(New Article With {.Title = "The Atom", .Author = "Jim", _
.IsPriorityArticle = True})
End With
MyArticles = listOfArticles
End Sub
(Кстати, я знаю, что мне больше не нужен символ продолжения строки, но этот сайт не будет форматировать код без него)
Обратите внимание на последние 2 - у них есть .IsPriorityArticle = True
. Это инициализированное значение при первом запуске приложения - если пользователь никогда не изменяет его, оно всегда будет .IsPriorityArticle = True
, но если они изменят его на False
, оно должно сохраняться в IsolatedStorage до следующего сеанса.
Так что я пытался заставить его сериализоваться правильно и не мог заставить что-либо работать. Я не знаю, как загрузить только свойства <DataMember>
из IsoStore, а не остальные.
Кто-нибудь знает, как это сделать, чтобы мой MyArticles As IEnumerable(Of Article)
использовал мои инициализированные значения, а затем проверил наличие <DataMember>
свойств, которые необходимо обновить?
Или я иду по неверному пути?