簡體   English   中英

C#XmlSerializer的XmlInclude在Java中等效

[英]C# XmlSerializer's XmlInclude equivalent in Java

我在尋找Java注釋,它與XmlInclude在C#中的作用相同。

我在套接字上得到了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類定義如下:

@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))]

<<<在我看來這是公共課程的魔點答案: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(同樣)自動處理字符串。 但是在有另一個對象的情況下,我可以使用XmlInclude和其他已知類聲明一個字符串。 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 
{
    ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM