序列化从 List 继承的类<>使用 DataContractSerializer 不会序列化对象属性



,因为XMLSerializer无法在类从List <>继承时序列化任何其他属性,因此我尝试使用DataContractSerializer解决它们。如下所述,这应该有效:当从list&lt;>继承一个类时,xmlSerializer不会序列化其他属性

,但我得到了相同的结果。如果对象是从List <>继承的,则TestValue属性未序列化。

using System.Runtime.Serialization;
[Serializable]
public class XSerBase 
{
    [DataMember]
    public XSerTest XSerTest { get; set; } = new XSerTest();
}
[Serializable]
public class XSerTest : List<string>
{
    [DataMember]
    public string TestValue { get; set; }
}
{// my serialize / deserialize example
    XSerBase objectSource = new XSerBase();
    objectSource.XSerTest.TestValue = "QWERT";
    MemoryStream mem = new MemoryStream();
    DataContractSerializer dcsSource = new DataContractSerializer(typeof(XSerBase));
    dcsSource.WriteObject(mem, objectSource);
    mem.Position = 0;
    XSerBase objectDestination = null;
    DataContractSerializer dcsDestination = new DataContractSerializer(typeof(XSerBase));
    objectDestination = (dcsDestination.ReadObject(mem) as XSerBase);
    // objectDestination.XSerTest.TestValue is null
    // objectDestination.XSerTest.TestValue is "QWERT", when XSerTest is not inherited from List<string>
}

我是否缺少属性?

我试图获得一个继承的班级列表,但没有成功。这是我能做的最好的

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Globalization;
using System.Xml;
using System.Xml.Serialization;
namespace ConsoleApplication106
{
    class Program
    {
        const string FILENAME = @"c:temptest.xml";
        static void Main(string[] args)
        {
            XSerBase test = new XSerBase()
            {
                XSerTest = new List<XSerTest>() { 
                    new XSerTest() { TestValue = "123"},
                    new XSerTest() { TestValue = "456"}
                }
            };

            XmlSerializer serializer = new XmlSerializer(typeof(XSerBase));
            XmlWriterSettings settings = new XmlWriterSettings();
            settings.Indent = true;
            XmlWriter writer = XmlWriter.Create(FILENAME,settings);
            serializer.Serialize(writer, test);
            writer.Flush();
            writer.Close();
        }
    }
    public class XSerBase
    {
        [XmlElement("XSerTest")]
        public List<XSerTest> XSerTest { get; set; }
    }
    public class XSerTest
    {
        public string TestValue { get; set; } 
    }
}

相关内容

  • 没有找到相关文章

最新更新