BSONにシリアル化するためにJSON.Netを使用しようとしていますが、元のオフセットは尊重されているようです。JSON.Net BSONシリアル化でDateTimeOffsetが正しく処理されていませんか?
私はこの作品をどのように作成しようとしているのか問題が見えますか?
[Test]
public void SerializeDateTimeOffsetToBson()
{
var serializer = new Newtonsoft.Json.JsonSerializer {
TypeNameHandling = TypeNameHandling.Auto,
DateParseHandling = DateParseHandling.DateTimeOffset,
DateTimeZoneHandling = DateTimeZoneHandling.RoundtripKind
};
var negOffset = new DateTimeOffset(2014, 7, 10, 0, 0, 0, new TimeSpan(-5, 0, 0));
var gmtOffset = new DateTimeOffset(2014, 7, 10, 0, 0, 0, new TimeSpan());
var posOffset = new DateTimeOffset(2014, 7, 10, 0, 0, 0, new TimeSpan(5, 0, 0));
var dt = new {
negOffset = negOffset,
gmtOffset = gmtOffset,
posOffset = posOffset
};
byte[] serialized;
using (var ms = new MemoryStream())
using (var writer = new BsonWriter(ms)) {
serializer.Serialize(writer, dt);
writer.Close();
serialized = ms.ToArray();
}
dynamic deserializedDt;
using (var ms = new MemoryStream(serialized))
using (var rdr = new BsonReader(ms)) {
deserializedDt = (dynamic)serializer.Deserialize(rdr);
rdr.Close();
}
Assert.IsTrue(deserializedDt.negOffset == dt.negOffset);
Assert.IsTrue(deserializedDt.posOffset == dt.posOffset);
Assert.IsTrue(deserializedDt.gmtOffset == dt.gmtOffset);
}
3つのアサーションはすべて失敗します。 deserializedDt.posOffset
は2014年12 PM -07のオフセットで7月9日で、00(コンピュータの現在のタイムゾーン):逆シリアル化後
、deserializedDt.negOffset
は午後10時-07のオフセットで7月9日2014で00、およびdeserializedDt.gmtOffset
は7月9日です2014 5 PM - オフセットは-07:00です。
.Net 4.0プロジェクトでJSON.Net 8.0.3を使用する。
UPDATE ------------------
はさらに調査した後、私はhttps://github.com/JamesNK/Newtonsoft.Json/issues/898
BSONで繰り返すJSONと同じことですrn:http://www.hanselman.com/blog/OnTheNightmareThatIsJSONDatesPlusJSONNETAndASPNETWebAPI.aspx – mms