1

私は、WCF REST テンプレート 40 を使用する Web サービスを持っています。私のデータが設定されている方法では、何にも属性がなく[DataContract][DataMember]クラスとそのパブリック プロパティだけです。例:

public class Permission : ServiceClass
{        
    public int       PermissionID          { get; set; }
    public string    PermissionName        { get; set; }
    public string    PermissionCode        { get; set; }
    public string    PermissionDescription { get; set; }
    public bool      IsActive              { get; set; }
    public DateTime? StartDate             { get; set; }
    public DateTime? EndDate               { get; set; }
    public int       SystemID              { get; set; }
}

これは、プロパティが null の場合 (たとえば 2 つの DateTime オブジェクト) を除き、正常に機能します。json にはこれらの値が含まれます。それらは省略していただきたいです。[DataMember(EmitDefaultValue=false)]andを追加しようとしましたが[DataMember(IsRequired=true)](読み込み時にデフォルトのシリアライザーを使用していないので、とにかく必要ないと思います)、機能していないようです。誰かがこれを経験したことがあり、何らかの回避策を知っていますか?

4

1 に答える 1

3

[DataMember]属性は、クラスも で装飾されている場合にのみ適用され[DataContract]ます。それは可能ですが、データ コントラクト ルートに進むと、シリアル化は「オプトイン」モデルになります。[DataMember] を使用して他のメンバーも宣言する必要があります。

[DataContract]
public class Permission : ServiceClass
{
    [DataMember]
    public int       PermissionID          { get; set; }
    [DataMember]
    public string    PermissionName        { get; set; }
    [DataMember]
    public string    PermissionCode        { get; set; }
    [DataMember]
    public string    PermissionDescription { get; set; }
    [DataMember]
    public bool      IsActive              { get; set; }
    [DataMember(EmitDefaultValue = false)]
    public DateTime? StartDate             { get; set; }
    [DataMember(EmitDefaultValue = false)]
    public DateTime? EndDate               { get; set; }
    [DataMember]
    public int       SystemID              { get; set; }
}

また、このコントラクトは現在データ コントラクト モデルの一部であるため、基本型 (ServiceClass) もデータ コントラクトを使用するように変更する必要があります。

于 2013-01-28T20:39:31.277 に答える