簡體   English   中英

將成員強制轉換為System.Object后,C#XmlSerializer無法序列化

[英]C# XmlSerializer can't serialize after casting member to System.Object

一個簡單的結構:

public struct TestA
{
    public object value;
}

創建並序列化它:

List<string> value = new List<string>();
value.Add("a1");
TestA a = new TestA();
a.value = value;

MemoryStream stream = new MemoryStream();
XmlSerializer xml = new XmlSerializer(a.GetType());
xml.Serialize(stream, a);

無法序列化,InvalidOperationException:參數對象'System.Collections.Generic.List'的類型不是原始類型。

如果更改"public object value;" 改為"public List<string> value;" ,可以序列化。

我想使用該object value來存儲具有不同類型的值,因此我將類型設置為object 如:

a.value = new List<int>();
a.value = 3;
a.value = "a string";

這應該做的工作。

[Serializable]
public class TestA : IXmlSerializable
{
    public object value;

    public XmlSchema GetSchema()
    {
        return (null);
    }

    public void ReadXml(XmlReader reader)
    {
        value = reader.ReadContentAsObject();
    }

    public void WriteXml(XmlWriter writer)
    {
        writer.WriteValue(value);
    }
}

感謝code4life和Soham,我沒有測試您的想法,因為我找到了一種非常簡單的方法。 給XmlSerializer第二個參數,給它確切的object value類型。

XmlSerializer xml = new XmlSerializer(a.GetType(), new Type[] { typeof(List<string>) });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM