C#XmlSerializer';XMLS在Java中具有等效性

C#XmlSerializer';XMLS在Java中具有等效性,c#,java,xml,annotations,xmlinclude,C#,Java,Xml,Annotations,Xmlinclude,我正在寻找一个Java注释,它的功能与C#中的XmlInclude相同 我得到了一个套接字上的XML结构。结构如下所示: <Answer xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <FunctionReturnCode>0</FunctionReturnCode> <AnswerOb

我正在寻找一个Java注释,它的功能与C#中的XmlInclude相同

我得到了一个套接字上的XML结构。结构如下所示:

<Answer xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <FunctionReturnCode>0</FunctionReturnCode>
    <AnswerObject xsi:type="Status">
       <DoorOpen>79</DoorOpen>
    </AnswerObject>
</Answer>
[XmlInclude(typeof(SelStatus))]
在C#中,类看起来像这样:

<Answer xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <FunctionReturnCode>0</FunctionReturnCode>
    <AnswerObject xsi:type="Status">
       <DoorOpen>79</DoorOpen>
    </AnswerObject>
</Answer>
[XmlInclude(typeof(SelStatus))]

@Object类型属性上的XmlElement是正确的映射:

@XmlElement(name="AnswerObject")
public Object getAnswerObject() { return this.m_answerObject; }
public void setAnswerObject(Object _answerObject) { this.m_answerObject = _answerObject;}
您需要确保您的JAXBContext知道AnswerObject的任何可能值。创建JAXBContext时,可以将其设置为以下类:

JAXBContext.newInstance(Answer.class, ValueA.class, ValueB.class);
或者通过@XmlSeeAllow注释指定它们

@XmlRootElement(name="Answer")
@XmlType(propOrder = {"functionReturnCode", "answerObject"})
@XmlSeeAlso{{ValueA.class, ValueB.class}
public class Answer 
{
    ...
}

如果对象既不是null也不是字符串,则解组器将返回我“ElementNSImpl”。但是我想要正确填充的对象。就像.NET一样:)正如我之前写的,只有字符串或null被正确地解组。好的,最后我找到了问题所在。将事件处理程序添加到解组器(使用setEventHandler方法)后,我收到以下错误消息。“无法识别的类型名称:Status。您是指Status吗?”……huhh:D所以我在类中添加了@XmlType(name=“Status”),并知道一切正常。谢谢你,布莱斯,你的提示就是我要找的那块丢失的东西:)
@XmlRootElement(name="Answer")
@XmlType(propOrder = {"functionReturnCode", "answerObject"})
@XmlSeeAlso{{ValueA.class, ValueB.class}
public class Answer 
{
    ...
}