3

我正在尝试获取Newtonsoft JSON Library,与 .NET 4.5 中的 WebAPI 捆绑在一起,以正确序列化以下类:

public class SomeClass {
    [Required]
    public DateTime DateToBeSerialized { get; set; }

    [Required]
    public Dictionary<DateTime, long> DatesDict { get; set; }
}

序列化后输出如下JSON:

"DateToBeSerialized": "2013-03-07T19:03:22.5432182Z",
"DatesDict": {
    "12/01/2012 00:00:00": 593,
    "01/01/2013 00:00:00": 691,
    "02/01/2013 00:00:00": 174,
    "03/01/2013 00:00:00": 467
}

如您所见,当对象为type时,序列化程序会遵循my的格式,但在序列化 a 的键部分时却没有这样做。DateTime DateTimeKeyValuePair<DateTime, long>

换句话说,我希望序列化程序输出:

"DateToBeSerialized": "2013-03-07T19:03:22.5432182Z",
"DatesDict": {
    "2012-12-01T00:00:00.0000000Z": 593,
    "2013-01-01T00:00:00.0000000Z": 691,
    "2013-02-01T00:00:00.0000000Z": 174,
    "2013-03-01T00:00:00.0000000Z": 467
}

我希望社区可以提供有关如何解决此问题的任何建议。

4

1 回答 1

0

这已在 JSON.Net 5.0 第 1 版(2013 年 4 月 7 日)中得到纠正。如果您更新到最新版本,您应该已准备就绪。

这是我用来验证的测试代码:

SomeClass sc = new SomeClass();
sc.DateToBeSerialized = new DateTime(2013, 3, 7, 19, 3, 22, 543, DateTimeKind.Utc);
sc.DatesDict = new Dictionary<DateTime, long>();
sc.DatesDict.Add(new DateTime(2012, 12, 1, 0, 0, 0, 1, DateTimeKind.Utc), 593);
sc.DatesDict.Add(new DateTime(2013, 1, 1, 0, 0, 0, 2, DateTimeKind.Utc), 691);
sc.DatesDict.Add(new DateTime(2013, 2, 1, 0, 0, 0, 3, DateTimeKind.Utc), 174);
sc.DatesDict.Add(new DateTime(2013, 3, 1, 0, 0, 0, 4, DateTimeKind.Utc), 467);

string json = JsonConvert.SerializeObject(sc, Formatting.Indented);
Console.WriteLine(json);

输出:

{
  "DateToBeSerialized": "2013-03-07T19:03:22.543Z",
  "DatesDict": {
    "2012-12-01T00:00:00.001Z": 593,
    "2013-01-01T00:00:00.002Z": 691,
    "2013-02-01T00:00:00.003Z": 174,
    "2013-03-01T00:00:00.004Z": 467
  }
}
于 2014-01-13T05:06:15.720 回答