I am serializing a complex object with lot of properties of other Types and Lists to JSON form but the issue is with DateTime properties. I get the epoch time with Javascrip
There is a solution to this using the RegisterConverters method on the serializer object.
Custom DateTime JSON Format for .NET JavaScriptSerializer
You just create a class that inherit JavaScriptConverter and implement your own serialization of the DateTime object.
And then serialize like this:
var obj = new { date = DateTime.Now };
var ser = new JavaScriptSerializer();
ser.RegisterConverters(new[] { new DateTimeJavaScriptConverter() });
var result = ser.Serialize(obj);
result = {"date":"2019-10-25T11:49:58.7322411Z"}
Change the line
return new CustomString(((DateTime)obj).ToUniversalTime().ToString("O"));
for your custom version of the DateTime.
The class from the link:
public class DateTimeJavaScriptConverter : JavaScriptConverter
{
public override object Deserialize(IDictionary dictionary, Type type, JavaScriptSerializer serializer)
{
return new JavaScriptSerializer().ConvertToType(dictionary, type);
}
public override IDictionary Serialize(object obj, JavaScriptSerializer serializer)
{
if (!(obj is DateTime)) return null;
return new CustomString(((DateTime)obj).ToUniversalTime().ToString("O"));
}
public override IEnumerable SupportedTypes
{
get { return new[] { typeof(DateTime) }; }
}
private class CustomString : Uri, IDictionary
{
public CustomString(string str)
: base(str, UriKind.Relative)
{
}
void IDictionary.Add(string key, object value)
{
throw new NotImplementedException();
}
bool IDictionary.ContainsKey(string key)
{
throw new NotImplementedException();
}
ICollection IDictionary.Keys
{
get { throw new NotImplementedException(); }
}
bool IDictionary.Remove(string key)
{
throw new NotImplementedException();
}
bool IDictionary.TryGetValue(string key, out object value)
{
throw new NotImplementedException();
}
ICollection