ServiceStack.Text名前空間のToJson<>()
メソッドを使用して逆シリアル化するオブジェクトがあります。
シリアル化中にすべてのGET
のみのプロパティを省略するにはどうすればよいですか? [Ignore]
のような属性や、プロパティを省略できるように装飾できるものはありますか?
ありがとう
ServiceStackのテキストシリアライザー は.NETのDataContractシリアライザーの動作に従います。つまり、オプトアウト_[IgnoreDataMember]
_属性を使用してデータメンバーを無視できます。
_public class Poco
{
public int Id { get; set; }
public string Name { get; set; }
[IgnoreDataMember]
public string IsIgnored { get; set; }
}
_
オプトインの代替手段は、シリアル化するすべてのプロパティを_[DataMember]
_で装飾することです。残りのプロパティはシリアル化されません。例:
_[DataContract]
public class Poco
{
[DataMember]
public int Id { get; set; }
[DataMember]
public string Name { get; set; }
public string IsIgnored { get; set; }
}
_
最後に、属性を必要としない非侵入型のオプションもあります。例:
_JsConfig<Poco>.ExcludePropertyNames = new [] { "IsIgnored" };
_
ServiceStackのSerializersは、プロパティをシリアル化する必要があるかどうかを示すために、従来の名前のShouldSerialize({PropertyName})
メソッドを提供することにより、シリアル化の動的制御もサポートします。
_public class Poco
{
public int Id { get; set; }
public string Name { get; set; }
public string IsIgnored { get; set; }
public bool? ShouldSerialize(string fieldName)
{
return fieldName == "IsIgnored";
}
}
_
Null許容メンバーの場合、シリアル化する前にnullに設定することもできます。
これは、複数のAPI呼び出しに再利用される単一のビュー/ APIモデルを作成する場合に特に便利です。サービスは、応答オブジェクトに設定する前に修正できます。
例:
public SignInPostResponse Post(SignInPost request)
{
UserAuthentication auth = _userService.SignIn(request.Domain, true, request.Username, request.Password);
// Map domain model ojbect to API model object. These classes are used with several API calls.
var webAuth = Map<WebUserAuthentication>(auth);
// Exmaple: Clear a property that I don't want to return for this API call... for whatever reason.
webAuth.AuthenticationType = null;
var response = new SignInPostResponse { Results = webAuth };
return response;
}
エンドポイントごとに、すべてのメンバー(null許容でないものを含む)のシリアル化を動的に制御する方法があればいいのにと思います。