Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Json.NET ToObject Date Serialization Format

Tags:

c#

.net

json.net

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)?

like image 898
Jonathan Avatar asked Dec 22 '25 20:12

Jonathan


1 Answers

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.

like image 121
Box Very Avatar answered Dec 24 '25 11:12

Box Very



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!