我在尝试设置自定义日期格式时使用Newtonsoft.Json ToObject将JSON转换为我的自定义对象,但尝试了不同的方法我根本无法改变日期格式。< / p>
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
}
如何让ToObject以我想要的格式返回日期(或保持不变)?
答案 0 :(得分:1)
似乎JToken.Parse
之前正在进行某种类型转换。
正如Do not convert JToken date time string as DateTime
所述void Main()
{
string jsonResult = "[{\"daterecordedstring\":\"2016-11-21T08:24:42\"}]";
using (var sr = new StringReader(jsonResult))
using (var jr = new JsonTextReader(sr) { DateParseHandling = DateParseHandling.None })
{
var j = JToken.ReadFrom(jr);
Console.WriteLine(j["value"].ToString()); // prints '2016-11-21T08:24:42'
}
}
对user5090812的全部赞誉
答案 1 :(得分:0)
JToken的 ToObject 不尊重 DateParseHandling = DateParseHandling.None
代码如下: item => JToken 类型
Dictionary<string, string> data = item.ToObject<Dictionary<string, string>>(new JsonSerializer { DateParseHandling=DateParseHandling.None});
没有工作,它仍然可以转换为MM / dd / yyyy。
在我的情况下,我从反序列化字符串中获取JArray,请记住,JArray中的每个项目都是JToken。
要使其工作,请在生成JToken之前不添加任何格式指令。
因此,在反序列化级别上添加 DateParseHandling = DateParseHandling.None ,然后再生成JArray。
Newtonsoft.Json.Linq.JArray arr = JsonConvert.DeserializeObject(data, new JsonSerializerSettings { DateParseHandling=DateParseHandling.None}) as Newtonsoft.Json.Linq.JArray;
现在,如果您为每个JToken遍历此JArray并使用JToken.ToObject,则不会得到格式化的日期时间。