我有一个奇怪的问题。我使用的JSON框架从newtonsoft。但是它正在改变我的一些字符串的日期格式。
我在JSON字符串中传输一些字符串,像这样:
{"MyStrings":["Hello","World"]}
我有这个匹配的DTO类:
public class Test
{
public List<string> MyStrings { get; set; }
}
现在我想将它反序列化到我的DTO类中,像这样:
string content = @"{""MyStrings"":[""2016-10-07T13:37:01.4209934Z"",""2016-10-07T13:37:01.4209934Z""]}";
var obj = JObject.Parse(content);
var test = obj.ToObject<Test>();
你看,在JSON字符串中,有一些字符串碰巧看起来像一个日期时间值。
{
"MyStrings":
["2016-10-07T13:37:01.4209934Z",
"2016-10-07T13:37:01.4209934Z"]
}
如果我们研究字符串值,我们得到:"10/07/2016 13:37:01"
。完全不同的东西
这是怎么回事?我没有改变默认行为。JSON。NET正在自己更改字符串值。为什么这个框架改变我的字符串值?我想让它保持原样——一个字符串。
是JSON中的一个bug吗?或者我可以通过特殊设置控制此行为吗?
我尝试了JsonSerializerSettings中的所有enum设置。
-DateParseHandling.None
-DateFormatString
-DateFormatHandling
-DateTimeZoneHandling
毫无效果。
我认为这是因为您使用的是标准的JObject。解析,它'认为'这些值是日期(然后在执行。toobject()时对它们调用ToString())。
试试这个:
var foo = JsonConvert.DeserializeObject<Test>(content);
这样做,反序列化器将知道哪个是每个属性的目标类型,我猜。
JsonConvert是Newtonsoft内部的静态类。Json。
我找到了解决问题的方法。感谢qwertoyo的回答。
我不能直接使用DeserializeObject<>。我们使用JSON。NET在一个大型引擎中,首先它将被解析。稍后它将被转换为类型'X'。所以我要拆分这个
这是工作在我的场景:
JsonSerializerSettings settings = new JsonSerializerSettings
{
DateParseHandling = DateParseHandling.None
};
object dto = jObject.ToObject(dtoType, JsonSerializer.Create(settings));
这类似于"JObject"的默认实现。