驚くべき結果を得て、標準のBCL DateTimeクラスの代わりにプロジェクトを通してNodaTimeを使用しています。Newtonsoft JToken.ToObjectを使用して<T>を非直列化に変換するインスタント
プロジェクトから完全にDateTimeを取り消したいと思います。私は1つの場所でのみ使用しています - 日付を含む大きなJSONファイルをデシリアライズします。これらの日付は常に UTCで、は常にで、ISO 8601形式で指定されています。
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Schema;
namespace Foo.Parsing
{
public class Parser
{
JSchema schema;
JObject jsonObject;
public Parser(string jsonContent, string schemaString)
{
schema = JSchema.Parse(schemaString);
jsonObject = JObject.Parse(jsonContent);
}
public MyObject Parse()
{
return jsonObject.ToObject<MyObject>();
}
}
public class MyObject
{
[JsonProperty(Required = Required.Always)]
public DateTime date { get; set; }
// A lot of other properties here.
}
}
このすべてが非常にうまく動作しますが、現時点では、私はインスタントに日付時刻を変換するInstant.FromDateTimeUtc(myObject.date);
を使用する必要があります。 MyObjectに内部私は日付時刻を持っていると私はインスタントにこれを変更しようとすると、私は次のエラーを取得する:
Newtonsoft.Json.JsonSerializationException' in Newtonsoft.Json.dll Additional information: Error converting value 2016/07/07 12:00:00 AM to type 'NodaTime.Instant'. Path 'date', line 4, position 37
は私が私の日付が直接デシリアライズして、私の強く型付けされたMyObjectにへの私のJSONファイルをデシリアライズするための方法はありますDateTimeを変換するのではなく、Instantに変換しますか?
Noda Time User Guideパー
['NodaTime.Serialization.JsonNet'パッケージ](https://www.nuget.org/packages/NodaTime.Serialization.JsonNet)を使用していますか?これに役立つコンバータがあります。これを設定する方法の詳細については、[JSON.NETを使用した野田時刻のLocalDateTimeのデシリアライズ](http://stackoverflow.com/q/21050002/10263)を参照してください。 –
ありがとうございました。私はさらに一歩進んできましたが、 "予期しないトークンを解析して予期せぬトークンを取得しました。"というエラーが表示されています。 JObjectはそれが日付であることをどのように知っていますか?私はMyObject.dateをInstant/DateTimeではなく文字列に設定すると、別の(ISO以外の)形式に戻ってきますので、JObject.Parseの何かが日付としてフォーマットを認識しているようです... – Ivan