XmlInclude と同じことを C# で行う Java アノテーションを探しています。
ソケットを介して 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 の他の既知のクラスを使用して C# をアナウンスできます。Javaに似たようなものはありますか?