在json和Web api之间保留C#datetime本地时间?

我有问题,当我在json对象中有datatime时它会将它转换为C#dateTime中的UTC时区只是想问如何保持本地时间?我可以在web.config文件或geter或setter中设置时区属性,因为我必须可能反对有日期和时间吗? 这是一个类的例子?

public class Patient { public long RecordId { get; set; } public string Username { get; set; } public DateTime Date { get; set; } public bool Deleted { get; set; } public string ModifiedBy { get; set; } public DateTime ModifiedOn { get; set; } public string CreatedBy { get; set; } public DateTime CreatedOn { get; set; } } 

更新我尝试使用getter和setter来修复我有这个exception{Cannot evaluate expression because the current thread is in a stack overflow state.}

 [System.Web.Http.Route("api/postpatientform")] public HttpResponseMessage PostPatientForm(PatientViewModel form) { using (var db = new AthenaContext()) { try { var form2 = Mapper.Map(form); db.Patient.Add(form2); db.SaveChanges(); var newId = form2.RecordId; foreach (var activity in form.PatientActivities) { activity.PatientId = newId; db.NonPatientActivities.Add(Mapper.Map(activity)); } db.SaveChanges(); } catch (DbEntityValidationException e) { foreach (var eve in e.EntityValidationErrors) { Debug.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:", eve.Entry.Entity.GetType().Name, eve.Entry.State); foreach (var ve in eve.ValidationErrors) { Debug.WriteLine("- Property: \"{0}\", Error: \"{1}\"", ve.PropertyName, ve.ErrorMessage); } } throw; } } return Request.CreateResponse(HttpStatusCode.Created, null); } 

您可以更改序列化程序设置以使用JSON.net序列化程序:

 GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings = new JsonSerializerSettings { DateFormatHandling = DateFormatHandling.IsoDateFormat, DateTimeZoneHandling = DateTimeZoneHandling.Unspecified, }; 

您还可以选择各种日期格式: DateTimeZoneHandling

 ///  /// Specifies how to treat the time value when converting between string and . ///  public enum DateTimeZoneHandling { ///  /// Treat as local time. If the  object represents a Coordinated Universal Time (UTC), it is converted to the local time. ///  Local = 0, ///  /// Treat as a UTC. If the  object represents a local time, it is converted to a UTC. ///  Utc = 1, ///  /// Treat as a local time if a  is being converted to a string. /// If a string is being converted to , convert to a local time if a time zone is specified. ///  Unspecified = 2, ///  /// Time zone information should be preserved when converting. ///  RoundtripKind = 3 } 

你可以配置它。 请参阅: http : //www.newtonsoft.com/json/help/html/SerializeDateTimeZoneHandling.htm

这是一个例子:

 public void Config(IAppBuilder app) { var config = new HttpConfiguration(); var jsonFormatter = config.Formatters.OfType().First(); jsonFormatter.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Local; app.UseWebApi(config); } 

您可以使用TimeZoneInfo.ConvertTime转换为所需的时区。

查看此方法: https : //msdn.microsoft.com/en-us/library/bb382770(v = vs.110).aspx