2012-05-15 7 views
9

WebサービスからXMLをC#POCOにデシリアライズしようとしています。私はこれが必要なプロパティのほとんどのために働いているが、私は要素が存在するかどうかに基づいてboolプロパティを設定する必要がありますが、これを行う方法を見てことができないようですか?C#でboolにXML要素の存在を非直列化する

例のXMLスニペット:

<someThing test="true"> 
    <someThingElse>1</someThingElse> 
    <target/> 
</someThing> 

例C#クラス:

[Serializable, XmlRoot("someThing")] 
public class Something 
{ 
    [XmlAttribute("test")] 
    public bool Test { get; set; } 

    [XmlElement("someThingElse")] 
    public int Else { get; set; } 

    /// <summary> 
    /// <c>true</c> if target element is present, 
    /// otherwise, <c>false</c>. 
    /// </summary> 
    [XmlElement("target")] 
    public bool Target { get; set; } 
} 

これは私が処理だ実際のXMLオブジェクト階層の非常に簡単な例ですが、どのようなI実証達成しようとしている。

ヌル/空の要素をデシリアライズすることに関連して読んだその他の質問はすべて、私が必要としないようにNullable<T>を使用しているようです。

誰がどんな考えを持っていますか?

答えて

12

異なるプロパティを使用して要素の値を取得し、Targetプロパティを使用してその要素が存在するかどうかを調べる方法があります。そのようです。 <target />

+0

ありがとうございました。 –

0

が存在する場合ターゲットはtrueを返しますので、

[XmlElement("target", IsNullable = true)] 
public string TempProperty { get; set; } 

[XmlIgnore] 
public bool Target 
{ 
    get 
    { 
     return this.TempProperty != null; 
    } 
} 

として空の要素が存在していても、TempPropertyは、nullになりません、あなたがNULL可能なタイプを使用したくないなぜあなたは説明できますか?
ur pocoでint型(int型とは対照的に)プロパティを定義すると、実際には基底型のxmlを表しておらず、単にこれらの変数のデフォルト値を取得します。 uはあなたが文句を言わないウルXMLで値0と空の/ NULL文字列または整数を取得すると仮定した場合
は、youcanは


は、一般的に、私はその良いアイデアだと思いBalthyウルプロパティのそれぞれのために提案された方法、またはuse the method described hereを使用しましたur xmlを記述するスキーマを作成し、そのクラスに基づいてクラスを生成し、null可能な型を使用して、クラスが基礎となるデータを表現するようにしたい場合。

+0

Google検索アプライアンスの結果をデシリアライズしています。要素 ' 'は、結果が自動フィルタリングされる場合は' '要素に存在し、存在しない場合は存在しません。 結果セットがフィルタリングされているかどうかを示すプロパティを設定する必要があります。この場合、null値のブール値がどのように役立つのかわかりません。 –

+0

このような場合に使用されるNULL値は、tiselfプロパティのためのものであり、空の/ nullであるかどうかを示すブール値ではありません。あなたがFIのコンテンツに気を配らず、そこにいるかどうかだけをチェックしたい場合は、balthysメソッドがその仕事を行います。存在を確認したい値が、クラスurのインスタンスで使用されている数値、またはnull以外の既定値を取得する場合は、Nullableプロパティを使用してより高度なシナリオを作成します。 IF が整数型の数値型で、urクラスのint FIを使用すると、常に0の値を持ちますが、これはnullと同じではありません。 – YavgenyP

+0

ありがとう、私はNullableが何であるかを理解しています。しかし、この文脈では、Balthyが示唆する単純なヌルチェックで、値以外の型を使用するよりも優れていません。 ''要素には決して値がありません - 単純に何かを表す要素が存在するだけです。したがって、 'Nullable 'の値は常に 'default(T)'またはnullになります。 –

関連する問題