C# IsoDateTimeConverter和JsonSerializerSettings:使用DateTimeOffset区分DateTime

C# IsoDateTimeConverter和JsonSerializerSettings:使用DateTimeOffset区分DateTime,c#,datetimeoffset,jsonserializer,C#,Datetimeoffset,Jsonserializer,在我的C#模型中,我同时使用DateTime和DateTimeOffset,例如: class Foo { public DateTime Date { get; set; } public DateTimeOffset CreationDate { get; set; } } 当我序列化为JSON时,我是这样做的: Foo foo = new Foo(); foo.Date = DateTime.UtcNow; foo.Cre

在我的C#模型中,我同时使用
DateTime
DateTimeOffset
,例如:

   class Foo 
   {
        public DateTime Date { get; set; }
        public DateTimeOffset CreationDate { get; set; }
   } 
当我序列化为JSON时,我是这样做的:

  Foo foo = new Foo();
  foo.Date = DateTime.UtcNow;
  foo.CreationDate = DateTime.UtcNow;

  var isoDateTimeConverter = new IsoDateTimeConverter();
  isoDateTimeConverter.DateTimeFormat = "yyyy'-'MM'-'dd";

  var serializerSettings = new JsonSerializerSettings();
  serializerSettings.Converters.Add(isoDateTimeConverter);

  JsonSerializer serializer = JsonSerializer.Create(serializerSettings);
  serializer.Serialize(writer, foo);
这将生成以下JSON:

 {
     Date = "2019-02-26",
     CreationDate = "2019-02-26"
 }
 {
     Date = "2019-02-26",
     CreationDate = "2019-02-26T12:03:00-03:00"
 }
由于
IsoDateTimeConverter

我想做的是区分
DateTime
DateTimeOffset
的序列化

我的目标是得到这个JSON:

 {
     Date = "2019-02-26",
     CreationDate = "2019-02-26"
 }
 {
     Date = "2019-02-26",
     CreationDate = "2019-02-26T12:03:00-03:00"
 }
我怎样才能做到这一点

其他信息:

  • 当我的C#model使用
    DateTime
    时,我将其保存为SQL Server中的
    Date
  • 当我的C#model使用
    DateTimeOffset
    时,我将其保存为SQL Server中的
    DateTimeOffset
  • 我先用EF代码
    • 你可以试试这个

      public class DateFormatConverter : IsoDateTimeConverter
      {
          public DateFormatConverter(string format)
          {
              DateTimeFormat = format;
          }
      }
      
      为每个
      日期
      属性指定格式

      public class Foo
      {
          [JsonConverter(typeof(DateFormatConverter), "yyyy-MM-dd")]
          public DateTime Date { get; set; }
      
          [JsonConverter(typeof(DateFormatConverter), "yyyy-MM-ddTHH:mm:ssK")]
          public DateTimeOffset CreationDate { get; set; }
      }
      
      无需其他设置,您可以
      序列化

      Foo foo = new Foo();
      foo.Date = DateTime.UtcNow;
      foo.CreationDate = DateTime.UtcNow;
      
      string isoJson = JsonConvert.SerializeObject(foo);
      
      输出

      {"Date":"2020-02-26","CreationDate":"2020-02-26T15:30:19-03:00"}
      

      它正在抛出:
      JsonconverterAttribute不包含采用2个参数的构造函数
      通过将Newtonsoft.Json从5.0.8更新为12.0.3Perfect解决了上述错误