【问题标题】:C# XmlSerializer can't serialize after casting member to System.ObjectC# XmlSerializer 在将成员转换为 System.Object 后无法序列化
【发布时间】:2016-02-16 03:37:20
【问题描述】:

一个简单的结构:

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&lt;string&gt; value;",就可以序列化了。

我想用这个object value来存储不同类型的值,所以我把类型设为object。 如:

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

【问题讨论】:

标签: c# serialization unity3d


【解决方案1】:

这应该可以完成工作。

[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);
    }
}

【讨论】:

    【解决方案2】:

    感谢 code4life 和 Soham,我没有测试过你的想法,因为我找到了一个非常简单的方法。 给 XmlSerializer 第二个参数,给它object value 的确切类型。

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

    【讨论】:

      猜你喜欢
      • 2011-07-06
      • 2010-12-06
      • 2021-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多