我从人们那里发现了关于集合中对象属性的类似问题,但我的问题是关于集合本身的属性。在下面的示例中,Something
的{{1}}属性不会使您从序列化中撤出。
如何使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(),}
};
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");
}