C# XmlSerializer和xsi:type
我有以下几个类,注意C# XmlSerializer和xsi:type,c#,.net,xml,serialization,C#,.net,Xml,Serialization,我有以下几个类,注意B继承A: [XmlInclude(typeof(B))] public class A {...} public class B : A {...} 当序列化B的实例时,将添加xsi:type属性: <A xsi:type="B"> 我序列化的其他类不会发生这种情况。是因为类在不同的名称空间中吗 如何解决此问题?尝试以下方法: B b = new B(); byte[] data = SerializeObject(b); File
B
继承A
:
[XmlInclude(typeof(B))]
public class A
{...}
public class B : A
{...}
当序列化B
的实例时,将添加xsi:type
属性:
<A xsi:type="B">
我序列化的其他类不会发生这种情况。是因为类在不同的名称空间中吗
如何解决此问题?尝试以下方法:
B b = new B();
byte[] data = SerializeObject(b);
File.WriteAllBytes("test.xml", data);
下面是序列化的代码
/// <summary>
/// Serialize object
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
internal static byte[] SerializeObject(object data)
{
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
//empty namespace...
ns.Add("", "");
XmlSerializer xmlSerializer = new XmlSerializer(data.GetType());
MemoryStream memStream = new MemoryStream();
xmlSerializer.Serialize(memStream, data, ns);
byte[] result = memStream.ToArray();
memStream.Dispose();
return result;
}
//
///序列化对象
///
///
///
内部静态字节[]序列化对象(对象数据)
{
XmlSerializerNamespaces ns=新的XmlSerializerNamespaces();
//空命名空间。。。
加上(“,”);
XmlSerializer XmlSerializer=新的XmlSerializer(data.GetType());
MemoryStream memStream=新的MemoryStream();
Serialize(memStream,data,ns);
字节[]结果=memStream.ToArray();
memStream.Dispose();
返回结果;
}
序列化结果为:
<?xml version="1.0"?>
<B>
</B>
如果你向代码展示你是如何序列化的,那么人们可以帮助你更好。如果是真的,请看我的编辑我不知道XmlTextWriterFull
是什么,但是这可以使用(var writer=new StringWriter()){var s=new XmlSerializer(typeof(B));s.serialize(writer,B);var xml=writer.ToString();}
谢谢,您的解决方案很有效。我的例子不完整,我犯了一个严重的思考错误。很抱歉给您添麻烦,我将标记要删除的问题。
<?xml version="1.0"?>
<B>
</B>