DataContractSerializer 忽略 Collections 子类中的字段
DataContractSerializer ignores fields in subclass of Collections
我一直在尝试序列化一个 class(见下文),它继承自 List<int>
并具有提供额外信息的字段。
最初,我一直在使用 XmlSerializer
,但我也遇到了问题。
根据 this post 的设计,XmlSerializer
不会序列化字段,但 DataContractSerializer
应该可以工作。
如有任何建议,我们将不胜感激!
[CollectionDataContract]
public class Group : List<int>
{
[DataMember]
public string Key { get; set; }
}
static void Main()
{
Group test = new Group { Key = "Test key" };
test.Add(60);
DataContractSerializer serializer = new DataContractSerializer(typeof(Group));
MemoryStream stream = new MemoryStream();
serializer.WriteObject(stream, test);
stream.Position = 0;
test = serializer.ReadObject(stream) as Group;
Console.WriteLine("{0}: {1}", test.Key ?? "No luck", test[0]);
}
谢谢,
诺亚
这是预期的行为。当从一个集合派生时,只有基础 class 会被序列化 :) 我建议创建一个基础包装器 class.
[DataContract]
class SuperWrapper {
private List<int> _myList;
private string _name;
[DataMember]
public List<int> Items { get { return _items; } set { _items = value; } }
[DataMember]
public string Name { get { return _name; } set { _name = value; } }
}
您需要创建一个包含所有对象或属性的 DTO
[DataContract]
class ResponseDTO
{
[DataMember]
public List<int> ListData{ get ;set; }
[DataMember]
public string Key{ get ;set; }
}
我一直在尝试序列化一个 class(见下文),它继承自 List<int>
并具有提供额外信息的字段。
最初,我一直在使用 XmlSerializer
,但我也遇到了问题。
根据 this post 的设计,XmlSerializer
不会序列化字段,但 DataContractSerializer
应该可以工作。
如有任何建议,我们将不胜感激!
[CollectionDataContract]
public class Group : List<int>
{
[DataMember]
public string Key { get; set; }
}
static void Main()
{
Group test = new Group { Key = "Test key" };
test.Add(60);
DataContractSerializer serializer = new DataContractSerializer(typeof(Group));
MemoryStream stream = new MemoryStream();
serializer.WriteObject(stream, test);
stream.Position = 0;
test = serializer.ReadObject(stream) as Group;
Console.WriteLine("{0}: {1}", test.Key ?? "No luck", test[0]);
}
谢谢, 诺亚
这是预期的行为。当从一个集合派生时,只有基础 class 会被序列化 :) 我建议创建一个基础包装器 class.
[DataContract]
class SuperWrapper {
private List<int> _myList;
private string _name;
[DataMember]
public List<int> Items { get { return _items; } set { _items = value; } }
[DataMember]
public string Name { get { return _name; } set { _name = value; } }
}
您需要创建一个包含所有对象或属性的 DTO
[DataContract]
class ResponseDTO
{
[DataMember]
public List<int> ListData{ get ;set; }
[DataMember]
public string Key{ get ;set; }
}