c# wpf - DataMemberのIsRequired属性は、null許容型と矛盾していますか?




byte nullable (3)

私は今日WCF契約でこれに遭遇しました:

[DataMember(IsRequired = true)]
public DateTime? LastModified { get; set; } 

IsRequired = Trueとnull許容型のDateTimeの結果は何ですか? それらは互いに矛盾しているように見えます。


Answers

この同様の矛盾する事件があなたの質問に答えてくれることを願っています。

IsRequiredとの相互作用

DataMemberAttribute属性にはIsRequiredプロパティがあります(デフォルトはfalseです)。 このプロパティは、シリアル化されたデータが逆シリアル化されるときに、そのデータメンバーがシリアル化されたデータに存在する必要があるかどうかを示します。 IsRequiredがtrue(値が存在する必要があることを示す)に設定され、EmitDefaultValueがfalse(デフォルト値に設定される場合は値が存在してはならないことを示す)に設定される場合、このデータメンバーのデフォルト値は結果が矛盾するため、シリアル化してください。 そのようなデータメンバがデフォルト値(通常はnullまたはゼロ)に設定されていてシリアル化が試みられると、SerializationExceptionがスローされます。


推測:あなたは 'LastModified'のノードを持っていなければなりません(=必須)が、内容は空でも構いません(=値はnullです)。


一般的なコンセンサスは、LINQはクエリと選択を目的としているということです。一方、ループと反復には従来の反復方法を使用します。

私はこれを言うのは嫌いですが、あなたはあなたのlinqクエリを実行させたいので伝統的なforeachループを使うでしょう、そしてあなたは結果として生じるIEnumerableを繰り返します。 それはコードの読みやすさに役立ちます、そして私はLINQが中毒性があることを認めます。 Lambdasと遅延実行を使用してすべての処理を実行したいのですが、ループ処理は従来のC#ループ処理方法に任せる必要があります。 これは間違いなく副作用に役立ちます。





c# .net wcf datamember isrequired