2016-09-13 2 views
0

背景JsonConvert.SerializeObjectは、null不可のDateTimeプロパティを持つクラスですか?

私はDateTime性質を有するクラスにデシリアライズされているいくつかのJSONを持っています。

ときどきJSONの対応する要素はnullです。

JSONをクラスにデシリアライズしようとすると、普通の古いDateTimenullを受け入れることができないため、エラーがスローされます。

簡単ですが、だから、最も簡単な解決がNULL可能DateTimeDateTime?)クラスの受容性を作ることです機能

が削除されますが、あなたが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をインスタンス化

存在しないと仮定すると私はこれより良いアプローチがなければならないと確信していますが、私はそれが何であるか分かりません。誰かがより良い解決策を提案できますか?

+0

'ヌル'JSON値を' DateTime'に変換しますか? – dbc

+0

@dbc - デシリアライゼーションの対象がnull可能なDateTimeプロパティを持つ 'FooRelaxed'であるため、それらのプロパティをnullに設定したいと思います。 – glaucon

+0

私が言っていることは、プロパティをヌル可能にしたり、DTOの 'FooRelaxed'をまったく導入する必要なしに、' FooStrict'に直接逆シリアル化したいとします。 JSONにnull値がある場合、 'DateTime'プロパティでどのような値を見たいですか? – dbc

答えて

2

適切なJsonProperty属性を持つ飾る:

[JsonProperty(NullValueHandling=NullValueHandling.Ignore)]

それとも

[JsonProperty("<NameOfProperty>", NullValueHandling=NullValueHandling.Ignore)]

最終的なコードは次のようになります。逆シリアル化するときに、シリアライザがしたいん何

[JsonProperty("EndDate", NullValueHandling=NullValueHandling.Ignore)] 
public DateTime EndDate { get; set; } 

[JsonProperty("StartDate", NullValueHandling=NullValueHandling.Ignore)] 
public DateTime StartDate { get; set; } 
+1

これは本当にうまくいきました。 – glaucon

+0

喜んでそれは助け:) –

関連する問題