asp.net – 在实体框架中使用PersianCalendar作为表列的正确方法
我有一个ASP.NET Web API项目,我正在尝试使用波斯日历存储我的日期.这是我的POCO课程.
public class Person { PersianCalendar p = new PersianCalendar(); public Person() { } public Person(string firstName,string lastName,PersianCalendar birthDate) { FirstName = firstName; LastName = lastName; DateOfBirth = birthDate; } public int PersonId { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public PersianCalendar DateOfBirth { get; set; } } 我为我的API创建了一个POST方法. public HttpResponseMessage Post([FromBody] Person _p) { try { db.Persons.Add(_p); db.SaveChanges(); var msg = Request.CreateResponse(HttpStatusCode.Created,_p); msg.Headers.Location = new Uri(Request.RequestUri + _p.PersonId.ToString()); return msg; } catch(Exception ex) { return Request.CreateErrorResponse(HttpStatusCode.BadRequest,ex); } } 我正在使用Fiddler发送我的POST请求. 但在Chrome开发工具中,我的Person类的断点birthDate设置为null. 解决方法
模型POCO中的DateOfBirth不应该是PersianCalendar类型.日历用于操作DateTime对象,而不是DateTime对象的容器.
您的模型应将出生日期存储为正常的DateTime,然后您可以使用PersianCalendar来操作它.简单(但有点难看)的方法是使用DateTime字段和单独的公共字符串属性来获取和设置由波斯日历格式化的日期: public class Person { PersianCalendar p = new PersianCalendar(); public Person() { } public Person(string firstName,DateTime birthDate) { FirstName = firstName; LastName = lastName; DateOfBirth = birthDate; } public Person(string firstName,string birthDateString) { FirstName = firstName; LastName = lastName; DateOfBirthString = birthDateString; } public int PersonId { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public DateTime DateOfBirth; public string DateOfBirthString { get { return string.Format("{0}/{1}/{2}",p.GetYear(DateOfBirth),p.GetMonth(DateOfBirth),p.GetDayOfMonth(DateOfBirth)); } set { var parts = value.Split('/'); DateOfBirth = p.ToDateTime(int.Parse(parts[0]),int.Parse(parts[1]),int.Parse(parts[2]),0); } } } 请记住,DateTime代表一般特定时刻.它没有任何唯一正确的字符串表示形式.但是如果你使用上面的内容,那么你就可以决定对你的应用程序唯一正确的字符串表示是一个波斯日期,格式为yyyy / MM / dd. 编辑:您还可以创建自定义JSON JsonConverter并在模型中使用它.您的POCO模型可能如下所示: public class Person { public Person() { } public Person(string firstName,DateTime birthDate) { FirstName = firstName; LastName = lastName; DateOfBirth = birthDate; } public int PersonId { get; set; } public string FirstName { get; set; } public string LastName { get; set; } [JsonConverter(typeof(PersianDateConverter))] public DateTime DateOfBirth; } PersianDateConverter类看起来像这样: public class PersianDateConverter : JsonConverter { PersianCalendar pc = new PersianCalendar(); public PersianDateConverter() { } public override object ReadJson(JsonReader reader,Type objectType,object existingValue,JsonSerializer serializer) { string persianDateString = reader.Value as string; if (persianDateString == null) throw new ArgumentException("Error in PersionDateConverter.ReadJson: Got null string"); var parts = persianDateString.Split('/'); return pc.ToDateTime(int.Parse(parts[0]),0); } public override void WriteJson(JsonWriter writer,object value,JsonSerializer serializer) { DateTime d = (DateTime)value; string output = string.Format("{0}/{1}/{2}",pc.GetYear(d),pc.GetMonth(d),pc.GetDayOfMonth(d)); writer.WriteValue(output); } public override bool CanConvert(Type objectType) { if (objectType.Name == "DateTime") return true; return false; } } 注意:此PersianDateConverter未针对边缘情况进行良好测试.只要它操作的数据有效,似乎工作正常. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- BeginRequest触发ASP.NET MVC应用程序中的静态文件
- asp.net – 为什么Glimpse会禁用请求验证?
- asp.net-mvc – 是否有一个ASP MVC与JSTL标签等效?
- asp.net-mvc-4 – 自定义错误在我的MVC 4应用程序中无效
- .net – SqlConnection的Dispose方法是否会干扰连接池?
- asp.net-mvc – 首先通过NuGet尝试StructureMap和MVC3
- asp.net-mvc – URL中的ASP.NET MVC冒号
- asp.net-mvc – 我应该如何管理ASP.NET MVC 4应用程序中的成
- asp.net-mvc – Css和脚本不工作,直到用户登录网站 – Asp.
- asp.net 4.5脚本捆绑也没有bundeling也没有缩小
- asp.net – 使用Web Garden模拟Web Farm会话问题
- asp.net – 单语句VB.NET条件为false时执行if-bl
- 看美剧英文字幕学英语的利器——&ldqu
- asp-classic – 使用经典ASP区分测试和生产的最佳
- ASP.NET MVC – 要从外部控制器或视图确定的内容
- 如何在中心对齐asp.net标签文本
- asp.net – 单击时更改asp:CheckBox的文本
- ASP.NET:如何将HtmlAnchor转换为静态文本?
- asp.net-mvc – ASP.NET Web Api – 将对象发布到
- asp.net-mvc-3 – MVC绑定到带有列表属性的模型忽