我从人们那里发现了关于集合中对象属性的类似问题,但我的问题是关于集合本身的属性。在下面的示例中, 的Something
属性Collection
不会从序列化返回。
如何DataContractSerializer
序列化Something
集合的属性?我知道在集合对象之外创建属性的解决方法,但这否定了甚至使用自定义集合的原因(将来可以向它添加属性的能力)。
这也会NetDataContractSerializer
发生XmlSerializer
。
对象
[DataContract]
public class TempClass
{
[DataMember]
public TempStuffCollection Collection { get; set; }
}
[CollectionDataContract]
public class TempStuffCollection : List<TempStuff>
{
[DataMember]
public string Something { get; set; }
}
[DataContract]
public class TempStuff
{
[DataMember]
public string Foo { get; set; } = "Bar";
}
序列化助手
public TempClass Deserialize(byte[] serializedBytes)
{
using (Stream memoryStream = new MemoryStream(serializedBytes))
{
DataContractSerializer deserializer = new DataContractSerializer(typeof(TempClass));
TempClass storeMessage = (TempClass)deserializer.ReadObject(memoryStream);
return storeMessage;
}
}
public byte[] Serialize(TempClass storeMessage)
{
using (MemoryStream memoryStream = new MemoryStream())
{
DataContractSerializer serializer = new DataContractSerializer(typeof(TempClass));
serializer.WriteObject(memoryStream, storeMessage);
return memoryStream.ToArray();
}
}
示例程序
void Main()
{
var o = new TempClass
{
Collection = new TempStuffCollection
{
new TempStuff(),
new TempStuff(),
new TempStuff(),
}
};
o.Collection.Something = "this should still be here";
var serialized = Serialize(o);
var deserialized = Deserialize(serialized);
// Outputs: 3
Console.WriteLine(deserialized.Collection.Count);
// Outputs: null
Console.WriteLine(deserialized.Collection.Something ?? "null");
}
输出
3
null