背景JsonConvert.SerializeObjectは、null不可のDateTimeプロパティを持つクラスですか?
私はDateTime
性質を有するクラスにデシリアライズされているいくつかのJSONを持っています。
ときどきJSON
の対応する要素はnull
です。
JSON
をクラスにデシリアライズしようとすると、普通の古いDateTime
はnull
を受け入れることができないため、エラーがスローされます。
簡単ですが、だから、最も簡単な解決がNULL可能DateTime
(DateTime?
)クラスの受容性を作ることです機能
が削除されますが、あなたがDateTime
方法の多くはそこだと行う場合には、もはや使用することはできませんそれらの特性について。
動作しています...変ですか? NULL可能DateTime
性質を持つクラスFooRelaxedへJSON
をデシリアライズ
- :
public class FooRelaxed { [Required(ErrorMessage = "Please enter the id.")] public int? Id { get; set; } [Required(ErrorMessage = "Please enter the Start Date.")] public DateTime? StartDate { get; set; } [Required(ErrorMessage = "Please enter the End Date.")] public DateTime? EndDate { get; set; } public FooRelaxed() { } public FooRelaxed( int? id, DateTime? startdate, DateTime? enddate) { this.Id = id; this.EndDate = enddate; this.StartDate = startdate; } } public class FooStrict [Required(ErrorMessage = "Please enter the id.")] public int Id { get; set; } [Required(ErrorMessage = "Please enter the Start Date.")] public DateTime StartDate { get; set; } [Required(ErrorMessage = "Please enter the End Date.")] public DateTime EndDate { get; set; } public FooStrict() { } public FooStrict(FooRelaxed obj) { this.Id = Convert.ToInt32(obj.Id); this.EndDate = Convert.ToDateTime(obj.EndDate); this.StartDate = Convert.ToDateTime(obj.StartDate); } }
私は、その後に、これらのクラスを使用します。私は、次のと考えているので、代替案を探しに
Validator.TryValidateObject
を呼び出して、結果のオブジェクトのプロパティを検証します。- エラーがすべての後続の処理のために使用FooStrict
- コンストラクタへの引数としてFooRexlaxedインスタンスを使用して、非NULL可能
DateTime
特性を有する「影」クラス、FooStrictをインスタンス化
存在しないと仮定すると私はこれより良いアプローチがなければならないと確信していますが、私はそれが何であるか分かりません。誰かがより良い解決策を提案できますか?
'ヌル'JSON値を' DateTime'に変換しますか? – dbc
@dbc - デシリアライゼーションの対象がnull可能なDateTimeプロパティを持つ 'FooRelaxed'であるため、それらのプロパティをnullに設定したいと思います。 – glaucon
私が言っていることは、プロパティをヌル可能にしたり、DTOの 'FooRelaxed'をまったく導入する必要なしに、' FooStrict'に直接逆シリアル化したいとします。 JSONにnull値がある場合、 'DateTime'プロパティでどのような値を見たいですか? – dbc