我正在动态反序列化Json字符串,我希望在反序列化时将它们转换为适当的类型,但由于它的动态,我不一定知道它们将成为什么。例如,我可能有一个看起来像这样的Json:
string serializedJsonString = {
"stringValue": "someString",
"dateTimeObject": "2016-12-08"
};
我希望将这个Json反序列化为它们的键值对,但是它们的值存储为适当的对象类型,在上面的示例中为String
和DateTime
。
我已尝试过以下某些内容:
IDictionary<string, object> blah = new JavaScriptSerializer().Deserialize<IDictionary<string, object>>(serializedJsonString);
和
dynamic blah = Json.Decode(serializedJsonString);
但它总是只转换&#34; dateTimeObject&#34;到一个字符串。我被告知反序列化Json可以做这个转换,但我无法弄清楚如何。我做错了什么?
答案 0 :(得分:0)
请同时阅读my previous answers之一。它解释了如何处理有关JSON的字典键值对。
然后DateTime部分:JSON中的DateTimes很难。
问题来自JSON规范本身:JSON中没有日期的文字语法。规范包含对象,数组,字符串,整数和浮点数,但它没有为日期定义标准。
在JSON中没有日期标准,当与其他系统交互时,可能的不同格式的数量是无穷无尽的。
您需要使用JsonConverter来覆盖类型(de)序列化的方式。
public class MyDateTimeConvertor : DateTimeConverterBase
{
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
return DateTime.Parse(reader.Value.ToString());
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
writer.WriteValue( ((DateTime)value).ToString("dd/MM/yyyy") );
}
}