DataContractSerializer不序列化自定义集合的属性

我从人们那里发现了关于集合中对象属性的类似问题,但我的问题是关于集合本身的属性。在下面的示例中,Something的{​​{1}}属性不会使您从序列化中撤出。

如何使Collection序列化集合的DataContractSerializer属性?我知道在集合对象外部创建属性的解决方法,但这可以消除使用自定义集合的原因(将来可以向其添加属性的功能)。

SomethingNetDataContractSerializer也会发生这种情况。

对象

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");
}
huangchaoqi 回答:DataContractSerializer不序列化自定义集合的属性

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3107633.html

大家都在问