2017-11-27 9 views
0

トピックは繰り返しです。これは私がXmlSerializerに取り組んで初めてではなく、私はこの問題を抱えていませんでした。しかし今回は、何が起こっているのかわからない。指定されたパターンは呼び出されますが、効果はありません - 動作しません(XmlSerializer)

public string comp_addr01 
{ 
    get 
    { 
     return this.comp_addr01Field; 
    } 
    set 
    { 
     this.comp_addr01Field = value; 
    } 
} 

[XmlIgnore] 
public bool comp_addr01Specified { get { return true; } } 

私がテストしたcomp_add01Specifiedは、xml出力には表示されませんが、テストされています。 XmlElement(IsNullable = true)

[XmlElement(IsNullable = true)] 
public string comp_addr01 
{ 
    get 
    { 
     return this.comp_addr01Field; 
    } 
    set 
    { 
     this.comp_addr01Field = value; 
    } 
} 

が、今<comp_addr01 xsi:nil="true" />XSIを追加したとき

唯一の方法は、これまで働いている:=「true」にnilが表示され、まだ私はを示したことがそれを必要としません。この混乱が何であるかわからない

+0

あなたの問題が実際にはっきりしていない。 comp_add01SpecifiedはXmlIgnoreを持っているのでxmlに含めてはいけません。 comp_addr01がxmlに含まれていないのですか? IsNullableがnullの場合、IsNullableなしではインクルードされません。ヌルでない場合は含まれます。 –

+0

@TimRutter、ご返信ありがとうございます。ポイントは、値がnullであるかどうかにかかわらず、comp_addr01が常にXMLファイルに表示されるようにすることです。したがって、comp_addr01Sepcifiedを使用して、XmlSerializerにこのプロパティを含める必要があることを認識させました。 comp_addr01Specifiedが呼び出されましたが、comp_addr01はnullでない限り表示されません。 'XmlElement(IsNullable = true) 'という属性を追加した後、comp_addr01が表示され始めました。間違っていなければ、以前と同じコンセプトを適用し、XmlElement属性なしで作業しました。これが私が質問を投稿した理由です。たぶん私はsthを逃した。 –

答えて

0

IsNullableがfalse(または省略)の場合、comp_addr01のnull値はそのプロパティのxmlに要素が追加されなくなります。この場合、シリアライザが空のタグを書き込むことは期待できません。なぜなら、空のタグがnullになるかどうかを後でデシリアライズする方法がないからです。サブプロパティが定義されています。

trueの場合、プロパティがnullの場合にxsi:nil = "true"の要素を作成するようシリアライザに指示します。xsi:nilビットはデシリアライザにこの要素が実際にnullであることを通知します。

XmlElementAttribute.IsNullable

「のXmlSerializerはXSIで空タグとしてNULLに設定されているメンバーシリアル化する必要があるかどうかを示す値を取得または設定します。trueに設定nil属性を」

関連する問題