我正在尝试序列化一些包含可观察对象集合的数据,并将其写入文本块。我的输出是[],我现在知道我犯了什么错误。
我的目标代码
public class ObjectList : ObservableCollection<string>, INotify...
{
public ObservableCollection<string> ObjectListInstance = new ObservableCollection<string>();
public string Name;
... get set methods & property changed method
}
我的IO代码
using (Stream newStream = await Windows.Storage.ApplicationData.Current.LocalFolder.OpenStreamForWriteAsync("file.txt", Windows.Storage.CreationCollisionOption.ReplaceExisting))
{
DataContractJsonSerializer newDataContractJsonSerializer = new DataContractJsonSerializer(typeof(ObservableCollection<ObjectList>));
newDataContractJsonSerializer.WriteObject(newStream, ObjectList);
}
我的代码存根
ObjectList newObjectList = new ObjectList();
newObjectList.Name = "AAA NAME";
newObjectList.ObjectListInstance.Add("ITEM 1");
newObjectList.ObjectListInstance.Add("ITEM 2");
bool status = await IOClass.IO.WriteCategory(newObjectList);
答案 0 :(得分:2)
您不能拥有 这个集合的类,并且具有要序列化的其他属性。但是,您可以拥有一个包含列表的类,并具有其他属性,这是我认为您在此处尝试做的事情。要使其正常工作,您需要对代码进行一些调整:
ObjectList
不应继承ObservableCollection<T>
(或任何其他列表类型)[DataContract]
标记您的课程,并使用[DataMember]
标记要序列化的属性/字段。DataContractJsonSerializer
实例时,请将要序列化的顶级类型传递给构造函数。在您的情况下,这应该是ObjectList
,而不是ObservableCollection<ObjectList>
。WriteObject
时,第二个参数应该是您要序列化的对象实例,而不是Type
。以下是更正的课程:
[DataContract]
public class ObjectList
{
[DataMember]
public ObservableCollection<string> ObjectListInstance = new ObservableCollection<string>();
[DataMember]
public string Name;
}
以下是更正的序列化代码:
DataContractJsonSerializer newDataContractJsonSerializer =
new DataContractJsonSerializer(typeof(ObjectList));
newDataContractJsonSerializer.WriteObject(newStream, newObjectList);
通过这些更改,您应该获得以下JSON输出:
{"Name":"AAA NAME","ObjectListInstance":["ITEM 1","ITEM 2"]}