JavaScriptSerializer nicht Deserialisieren DateTime/TimeSpan Richtig
Habe ein problem, wo DateTime/TimeSpan scheint nicht zu Deserialisieren korrekt mit JavaScriptSerializer.
Wenn ich das Objekt wieder nach dem Deserialisieren die Zeitspanne ist leer und wenn ich mit DateTime-dann sind das mal alle aus dem Gleichgewicht geraten.
Habe Artikel zu finden, aber es hat nicht wirklich helfen, mir zu viel.
http://www.west-wind.com/weblog/ShowPost.aspx?id=471402
Jemand irgendwelche Ideen? Sollte ich vielleicht versuchen die json.net Bibliothek?
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;
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fand ich die Antwort in dem folgenden Beitrag auf GitHub:
https://github.com/NancyFx/Nancy/issues/336
Im Grunde war die Antwort: zum erstellen einer neuen
TimeSpanJsonConverter
erbtJavaScriptConverter
- und dann passieren, dass eine Instanz der serializer-Klasse:Die vollständige Klasse für die Referenz ist (geschrieben von GrumpyDev):
Wird dies das Problem lösen, wenn Sie jemals das gleiche problem haben.
http://blog.devarchive.net/2008/02/serializing-datetime-values-using.html
Alle DateTime-Objekte müssen explizit angegeben werden als UTC.