Java 中 C# XmlSerializer 的 XmlIninclude 等效项

标签 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>
    <AnswerObject xsi:type="Status">
       <DoorOpen>79</DoorOpen>
    </AnswerObject>
</Answer>

对应的Java Class定义如下:

@XmlRootElement(name="Answer")
@XmlType(propOrder = {"functionReturnCode", "answerObject"})
public class Answer 
{
    private Object m_answerObject         = null;
    private long   m_uiFunctionReturnCode = 0;


    @XmlElement(name="FunctionReturnCode")
    public long getFunctionReturnCode(){ return this.m_uiFunctionReturnCode; }
    public void setFunctionReturnCode(long _uiFunctionReturnCode) { this.m_uiFunctionReturnCode = _uiFunctionReturnCode; }

    @XmlElement(name="AnswerObject")
    public Object getAnswerObject() { return this.m_answerObject; }
    public void setAnswerObject(Object _answerObject) { this.m_answerObject = _answerObject;}
}

在 C# 中,类看起来像这样:

[XmlInclude(typeof(SelStatus))]

<<< 在我看来这就是魔点 公共(public)课答案:ICloneable

{

    private uint   m_uiFunctionReturnCode  = 0;

    private object m_answerObject          = null;

    .....Setters/Getters here as well
}

问题是,“AnswerObject”可以是任何类型的对象。在我的示例中,“AnswerObject”是“Status”类型的对象,但它也可以是字符串或其他任何形式。

在 C# 中,我可以使用 XmlSerializer 来反序列化 XML 结构。在 Java 中我使用以下内容:

JAXBContext context = JAXBContext.newInstance(Answer.class);
Unmarshaller unmarschaller = context.createUnmarshaller();

C# 和 Java(也)自动处理字符串。但如果有另一个对象,然后是一个字符串,我可以使用 XmlIninclude 其他已知类来声明 C#。 Java中有类似的东西吗?

最佳答案

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);

或者通过@XmlSeeAlso注释指定它们。

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

关于Java 中 C# XmlSerializer 的 XmlIninclude 等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5499418/

相关文章:

c# - 在 Windows 服务中使用的最佳计时器

java - 私有(private) final vs 私有(private) final

java - 在 Hibernate 中映射具有多个 ID 的扩展实体

xml - 本地模式位置

xml - Golang net/http 包调用后返回base64

c# - 多部分标识符 "TextBox1.Text"无法在 C# ASP.NET 中绑定(bind)?

c# - 将 where 子句添加到嵌套的 Linq 选择

java - 分布式环境中的ExecutorCompletionService.take()方法

java - 如何正确使 dbunit 引用 xml 数据集中的 dtd 文件?

c# - 从从 api 填充的 ListView 行单击中提取数据