Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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# XML序列化和C语言的问题#_C#_Xml Serialization - Fatal编程技术网

C# XML序列化和C语言的问题#

C# XML序列化和C语言的问题#,c#,xml-serialization,C#,Xml Serialization,我正在尝试将一些C#类序列化为XML。在我尝试引入一些继承类之前,一切都很顺利 这些类[根据大小进行编辑] public class ParticipationClass { [XmlAttribute] public string typeCode; [XmlAttribute] public string contextControlCode; public ParticipationClass() { } } public c

我正在尝试将一些C#类序列化为XML。在我尝试引入一些继承类之前,一切都很顺利

这些类[根据大小进行编辑]

public class ParticipationClass
{
    [XmlAttribute]
    public string typeCode;

    [XmlAttribute]
    public string contextControlCode;

    public ParticipationClass()
    {
    }
}


public class p_recordTarget : ParticipationClass
{
    public p_recordTarget()
    {
        typeCode = "RCT";
        contextControlCode = "OP";
    }
}
使用类时,使用以下代码:

public class Test
{

    // other class attributes excluded.. 

    [XmlElement]
    public ParticipationClass recordTarget;

    private void Test()
    {
        recordTarget = new p_recordTarget();
    }
}
序列化失败,出现InvalidOperationException,查看我可以看到的异常详细信息“Message=”类型itk.cda.cdaclasses.p_recordTarget不是预期的。使用XmlInclude或SoapInclude属性指定静态未知的类型。”

因此,我想我需要一个XmlInclude,但我不确定如何使用。

这可能会帮助您:

这可能会帮助您:


简而言之,您需要使用基类上的属性让序列化程序了解派生类:

[XmlInclude(typeof(p_recordTarget))]
public class ParticipationClass {
    // ...
}

简而言之,您需要使用基类上的属性让序列化程序了解派生类:

[XmlInclude(typeof(p_recordTarget))]
public class ParticipationClass {
    // ...
}
像这样:

[XmlInclude(typeof(p_recordTarget))]
public class ParticipationClass
{
    [XmlAttribute]
    public string typeCode;

    [XmlAttribute]
    public string contextControlCode;

    public ParticipationClass()
    {
    }
}
像这样:

[XmlInclude(typeof(p_recordTarget))]
public class ParticipationClass
{
    [XmlAttribute]
    public string typeCode;

    [XmlAttribute]
    public string contextControlCode;

    public ParticipationClass()
    {
    }
}

看,谢谢你的快速回答。我已经试过了,它似乎没有任何区别。看看西蒙的答案(这是相同的)和其他网络资源,我怀疑这应该是答案。但它仍然不起作用,并产生相同的例外。感谢您的快速回答。我已经尝试过这个,它似乎没有任何区别。看看西蒙的答案(这是相同的)和其他网络资源,我怀疑这应该是答案。但它仍然不起作用,并产生相同的例外。西蒙,看看我对乔恩(谁有相同的答案)的评论。我认为它应该可以工作,但似乎不行。我认为你也可以将它放在方法上,但我应该有同样的效果。或者这是一个缓存问题。序列化是缓存的(只要可能)。Simon,请参阅我对Jon的评论(他有相同的答案)。我认为它应该可以工作,但似乎不行。我认为您也可以将它放在方法上,但我应该有相同的效果。或者这是一个缓存问题。序列化是缓存的(只要可能)。