asp.net-mvc-2 – JavaScriptSerializer没有正确反序列化DateTime / TimeS
发布时间:2020-05-23 21:20:00 所属栏目:asp.Net 来源:互联网
导读:有一个问题,其中DateTime / TimeSpan似乎没有使用JavaScriptSerializer正确反序列化. 当我在反序列化后得到Object时,TimeSpan为空,如果我使用DateTime,那么时间就完全没了. 找到了这篇文章,但它并没有真正帮助我太多. http://www.west-wind.com/weblog/ShowPo
|
有一个问题,其中DateTime / TimeSpan似乎没有使用JavaScriptSerializer正确反序列化.
有人有主意吗?我应该尝试json.net库吗? public class JsonFilter : ActionFilterAttribute
{
public string Param { get; set; }
public Type JsonDataType { get; set; }
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.HttpContext.Request.ContentType.Contains("application/json"))
{
string inputContent;
using (var sr = new StreamReader(filterContext.HttpContext.Request.InputStream))
{
inputContent = sr.ReadToEnd();
}
JavaScriptSerializer serializer = new JavaScriptSerializer();
var result = serializer.Deserialize(inputContent,JsonDataType);
filterContext.ActionParameters[Param] = result;
}
}
}
public class RosterItem
{
public RosterItem()
{
comments = new List<Form.Comment>();
}
public Boolean dirty { get; set; }
public int id { get; set; }
public int staffId { get; set; }
public String description { get; set; }
public int activityId { get; set; }
public DateTime date { get; set; }
public TimeSpan startTime { get; set; }
public TimeSpan endTime { get; set; }
public List<Form.Comment> comments { get; set; }
}
[JsonFilter(Param = "rosterItem",JsonDataType = typeof(RosterItem))]
public int SaveRosterEntry(RosterItem rosterItem)
{
RosterEntry rosterEntry = rosterEntryRepository.GetRosterEntry(rosterItem.id);
if (rosterEntry == null)
{
rosterEntry = new RosterEntry();
rosterEntryRepository.Add(rosterEntry);
}
rosterEntry.ActivityID = rosterItem.activityId;
rosterEntry.StartTime = rosterItem.startTime;
rosterEntry.EndTime = rosterItem.endTime;
rosterEntry.RosterDate = rosterItem.date;
rosterEntry.RosterEmployeeID = rosterItem.staffId;
rosterEntryRepository.Save();
return rosterEntry.RosterEntryID;
}
解决方法我在GitHub上的帖子中找到了答案:https://github.com/NancyFx/Nancy/issues/336 基本上答案是创建一个新的TimeSpanJsonConverter,它继承自JavaScriptConverter,然后将其传递给序列化程序类的实例: var serializer = new System.Web.Script.Serialization.JavaScriptSerializer()
serializer.RegisterConverters(new[] { new TimeSpanJsonConverter() });
全班供参考(由GrumpyDev编写): public class TimeSpanJsonConverter : JavaScriptConverter
{
public override IEnumerable<Type> SupportedTypes
{
get
{
return new[] { typeof(TimeSpan) };
}
}
public override object Deserialize(IDictionary<string,object> dictionary,Type type,JavaScriptSerializer serializer)
{
return new TimeSpan(
this.GetValue(dictionary,"days"),this.GetValue(dictionary,"hours"),"minutes"),"seconds"),"milliseconds"));
}
public override IDictionary<string,object> Serialize(object obj,JavaScriptSerializer serializer)
{
var timeSpan = (TimeSpan)obj;
var result = new Dictionary<string,object>
{
{ "days",timeSpan.Days },{ "hours",timeSpan.Hours },{ "minutes",timeSpan.Minutes },{ "seconds",timeSpan.Seconds },{ "milliseconds",timeSpan.Milliseconds }
};
return result;
}
private int GetValue(IDictionary<string,string key)
{
const int DefaultValue = 0;
object value;
if (!dictionary.TryGetValue(key,out value))
{
return DefaultValue;
}
if (value is int)
{
return (int)value;
}
var valueString = value as string;
if (valueString == null)
{
return DefaultValue;
}
int returnValue;
return !int.TryParse(valueString,out returnValue) ? DefaultValue : returnValue;
}
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc-4 – 如何让你的MVC控制器DRY为Edit- Save- Va
- asp.net – 实体框架删除子对象
- asp.net-mvc – OwinStartup没有开始…为什么?
- ASP.net应用程序的最佳perfmon计数器是什么?
- asp.net-mvc-4 – 没有为此对象定义的无参数构造函数.在剑道
- asp-classic – 如何使用经典asp中的vbscript下载文件
- asp.net-mvc – 为什么我的动作方法不会超时?
- asp.net-mvc – asp.net MVC:禁用一个TextBox
- asp.net – 在PreRender上添加控件页面
- asp.net-mvc – 避免@html.checkboxfor的foreach
推荐文章
站长推荐
- asp.net-mvc – Resharper导航到MVC视图
- asp.net-mvc – 如何单元测试HtmlHelper与Moq?
- asp.net-mvc – ASP.NET MVC中的模型绑定嵌套集合
- asp.net-mvc – ViewModel中的ASP.NET MVC Selec
- 如何在ASP.NET MVC中测试自定义模型绑定器?
- asp.net-mvc – ASP.Net MVC加载进度指标
- asp.net – 使用MVC4的Autofac:控制器没有默认构
- asp.net – 如何处理错误时使用jQuery.ajax()?
- asp.net-mvc – 为IIS托管的.SVC文件配置XML-RPC
- asp.net-mvc – 如何在回发后保持dropdownlist选
热点阅读
