I'm trying to set a custom date format when using Newtonsoft.Json ToObject to convert from JSON to my custom Object but trying different ways I can't get it to alter the date format at all.
public class CustomObject
{
public string DateRecordedString { get; set; }
}
static void Main(string[] args)
{
string jsonResult = "[{\"daterecordedstring\":\"2016-11-21T08:24:42\"}]";
JToken jtokenResult = JToken.Parse(jsonResult);
var objectResult1 = jtokenResult.ToObject<CustomObject[]>();
Console.WriteLine(objectResult1.First().DateRecordedString); // -> 11/21/2016 08:24:42
var objectResult2 = jtokenResult.ToObject<CustomObject[]>(new JsonSerializer { DateParseHandling = DateParseHandling.None });
Console.WriteLine(objectResult2.First().DateRecordedString); // -> 11/21/2016 08:24:42
var objectResult3 = jtokenResult.ToObject<CustomObject[]>(new JsonSerializer { DateFormatString = "yyyy-M-d" });
Console.WriteLine(objectResult3.First().DateRecordedString); // -> 11/21/2016 08:24:42
}
How can I get ToObject to return a date in the format I want (or leave it unchanged)?
JToken's ToObject doesn't respect DateParseHandling=DateParseHandling.None
The code as below: item=>JToken type
Dictionary<string, string> data = item.ToObject<Dictionary<string, string>>(new JsonSerializer { DateParseHandling=DateParseHandling.None});
No work, it still converts to MM/dd/yyyy.
In my case, I get JArray from deserialized string, remember each item in JArray is JToken.
To make it work, add none format instruction before it generates JToken.
So, add DateParseHandling=DateParseHandling.None on deserialize level before it generate JArray.
Newtonsoft.Json.Linq.JArray arr = JsonConvert.DeserializeObject(data, new JsonSerializerSettings { DateParseHandling=DateParseHandling.None}) as Newtonsoft.Json.Linq.JArray;
Now, if you loop through this JArray for each JToken and use JToken.ToObject, you will get none formatted datetime.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With