Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XmlSerializer和xsi:type_C#_.net_Xml_Serialization - Fatal编程技术网

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>