C#将对象实例序列化为XML
我在序列化对象实例时遇到了一个小问题,让一些伪代码来说明问题:C#将对象实例序列化为XML,c#,.net,xml-serialization,C#,.net,Xml Serialization,我在序列化对象实例时遇到了一个小问题,让一些伪代码来说明问题: List<A> ListOfA = new List<A>(); [Serializable] public class A { public Object Instance; ... } [Serializable] public class B { public String SomeAttribute = "example"; } // This will be called: voi
List<A> ListOfA = new List<A>();
[Serializable]
public class A
{
public Object Instance;
...
}
[Serializable]
public class B
{
public String SomeAttribute = "example";
}
// This will be called:
void Serialize()
{
var a = new A();
a.Instance = new B();
ListOfA.Add(a);
// a.Instance = new String("test"); works but List<String>, B, ... throws Invalid Operation Exception when serializing:
using (TextWriter textWriter = new StreamWriter(filePath, false))
{
var xmlSerializer = new XmlSerializer(ListOfA.GetType());
xmlSerializer.Serialize(textWriter, ListOfA );
}
}
List ListOfA=新列表();
[可序列化]
公共A类
{
公共对象实例;
...
}
[可序列化]
公共B级
{
公共字符串SomeAttribute=“示例”;
}
//这将被称为:
void Serialize()
{
var a=新的a();
a、 实例=新的B();
增加(a);
//a.实例=新字符串(“测试”);有效,但列表,B,…在序列化时引发无效操作异常:
使用(TextWriter TextWriter=new StreamWriter(文件路径,false))
{
var xmlSerializer=新的xmlSerializer(ListOfA.GetType());
Serialize(textWriter,ListOfA);
}
}
有人能解决这个问题吗
我尝试过使用xmlclude
,但没有任何结果
甚至可以在不知道对象类型的情况下序列化对象吗?试试:
[XmlInclude(typeof(B))]
public class A {
public Object Instance;
}
顺便说一句,[Serializable]对于xml序列化是无用的。谢谢您的快速响应,但我确实通过给XmlSerializer第二个参数找到了问题的解决方案:
var xmlSerializer = new XmlSerializer(ListOfA.GetType(), new Type[] { typeof(B) });
这样我就不必向类A添加[xmlclude(typeof(B))。在序列化过程中会出现什么错误?(查找内部异常))错误的类型是。。。B也不例外。使用XmlInclude或SoapInclude属性指定静态未知的类型。我是如何找到解决问题的方法的,我把它写在下面。