Я работаю в Windows Phone 7, но, полагаю, вопрос может быть Silverlight вообще (не .NET, хотя ISerializable
не существует в Windows Phone как suggested in this answer).Сериализация только некоторых свойств?
У меня есть ряд объектов, которые я создаю во время выполнения. Они будут в основном всегда одинаковыми, за исключением нескольких свойств.
Так что я бы в качестве объекта:
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
, - IsPriorityArticle
, HasBeenViewed
и DateViewed
. Остальная часть статична.
Я загружаю эти статьи в List(Of Article)
, и это становится моим источником данных для привязки. Когда пользователь просматривает статьи, он регистрируется при последнем просмотре и этой дате. IsPriorityArticle
может иметь истинное или ложное значение, которое может быть изменено пользователем - конечный пользователь может отметить, если он считается важной статьей (в этом случае он будет отображаться на другой странице статей с приоритетом) или для отмены отметки как ложной. Если это так, эта новая ценность должна сохраняться между сеансами.
У меня около 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
, это должно сохраниться в IsolStorage до следующего сеанса.
Итак, я поиграл с попыткой получить это для правильной сериализации и не может заставить ничего работать. Я не знаю, как загрузить только объекты <DataMember>
из IsoStore, а не остальные.
Кто-нибудь знает, как это сделать, чтобы мои MyArticles As IEnumerable(Of Article)
использовали мои инициализированные значения, а затем проверьте наличие каких-либо <DataMember>
свойств, которые необходимо обновить?
Или я ошибаюсь по этому пути?
Спасибо. Я хочу сделать сериализацию только нескольких свойств, а не всего объекта. Я загружаю переменную 'MyArticles' в' Application_Launching', увлажняя ее с помощью кода '.Add (...'. Точка в том, что я хочу сделать это, так что я не пишу кучу вещей в IsoStore, t должен быть там (например, '.Title' и т. д.), и, надеюсь, это ускорит время сериализации/десериализации. Поэтому вопрос: могу ли я это сделать так? XML или DataContract оба подходят для сериализации - есть ли много разница? – Stan
По-моему, если вы используете рекламодателя DataMember только для свойств, которые вы хотите сериализовать, а не для всех из них, то вполне нормально сериализовать весь класс и сохранить его как XML в isoStore. делаю это в своем приложении, и я еще не сталкивался с какими-либо проблемами. – evasilchenko
Я скоро отправлю это, но быстро вопрос. Поэтому, когда я создаю новый объект 'MyArticles', и я не сериализую' Title', (потому что он никогда не меняется), будет ли он сохраняться во всем классе? – Stan