0

次のエンティティ基本クラスがシリアル化可能としてマークされています。

[Serializable]
public abstract class EntityBase
{
    public bool Is_ActiveNull = true;
    [XmlElement(ElementName = "Is_ActiveFromNull")]
    ...  

次に、基本エンティティから継承する具体的なエンティティがあります。

[Serializable]
public class ContactEntity : EntityBase
{
 ...

このエンティティをコントラクトの入力パラメータとして使用するWCFサービスがあります。

クライアントからサービス参照を作成すると、フィールドIs_ActiveNullのデフォルト値を無視するreference.csが作成されます。

これは、reference.csファイルのEntityBaseクラスです。

public partial class EntityBase : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged 
{
    private bool Is_ActiveNullField;

    [System.Runtime.Serialization.DataMemberAttribute(IsRequired=true)]
    public bool Is_ActiveNull {
        get {
            return this.Is_ActiveNullField;
        }
        set {
            if ((this.Is_ActiveNullField.Equals(value) != true)) {
                this.Is_ActiveNullField = value;
                this.RaisePropertyChanged("Is_ActiveNull");
            }
        }
    }
    ...

この場合、Is_ActiveNullFieldはデフォルトでfalseに設定されています。

私の質問は、どうすればデフォルト値を保持できますか?

ありがとう

4

1 に答える 1

0

それらは、publicboolIs_ActiveNullのデフォルト値を保持するような属性ではありません。

しかし、Deseralizingがこのように起こるときあなたはそれを達成することができます

You will have to add EmitDefaultValue on you field

 [System.Runtime.Serialization.DataMemberAttribute(IsRequired=true, EmitDefaultValue=false)]
    public bool Is_ActiveNull {

and then 

[OnDeserializing]
    void BeforeDeserialization(StreamingContext ctx)
    {
        this.Is_ActiveNull = false;
    }

MSDNは、EmitDefaultValueの非実践も提供しています。

EmitDefaultValueプロパティをfalseに設定することは、推奨される方法ではありません。これは、特定の必要性がある場合にのみ実行する必要があります(相互運用性やデータサイズの削減など)。

于 2012-07-11T08:00:56.797 に答える