私の質問はthis oneと非常によく似ていますが、元の回答にコメントを投稿するには十分な評判がありません。DateTimeの列型は、カスタムクラスのDataTableプロパティをデシリアライズした後にString型になります
FillPDFというカスタムクラスがあります。これは、サーバーでシリアル化してクライアントでデシリアライズしています。
FillPDF dsPDF = JsonConvert.DeserializeObject<FillPDF>(json);
FillPDF
クラスは、私がDateTime
タイプが不適切String
として設定されている理由を知ってる元の質問に対する解決策を読んでからDataTables
のコレクションが含まれてDataSet
プロパティで構成されています。私はJson.NetのDataTableConverter
がそれぞれDataColumn.DataType
を最初の行だけを見て推測していることを理解しています(私の最初の行にはNULL
の値があります)。
元の質問から解決策を実装しようとしました。 DbcはDataTableConverter
をオーバーライドすることを提案しました。私はそのようにやったと私はそうのようにシリアライズとデシリアライズ時にsettings
オブジェクトを使用しています:
// Server
FillPDF pdfData = new FillPDF(strUniqueColID);
var settings = new JsonSerializerSettings { Converters = new[] { new TypeInferringDataTableConverter() } };
string json = JsonConvert.SerializeObject(pdfData, Formatting.Indented,settings);
// Client
var settings = new JsonSerializerSettings { Converters = new[] { new TypeInferringDataTableConverter() } };
FillPDF dsPDF = JsonConvert.DeserializeObject<FillPDF>(json,settings);
は、しかし、私はすべてのエラーを得ていないことだし、私の基礎となるのDataTableが正常に直列化復元されていません。これは、私が元の質問のように単純にDataTable
とは対照的にカスタムオブジェクトをシリアライズ/デシリアライズしているためです。私が行うことができるようにしたいと思い何
は次のとおりです。
if(c.ColumnName.toLower().Contains("date"))
{
// Set Column's Type to DateTime because I know all Column Names containing "date" should be of type DateTime
}
おそらくこれがオーバーライドさTypeInferringDataTableConverter
に追加する必要があります。
私はここからどこに行くべきかわからないので、私は助けを必要としています。
ありがとう、
ジャスティン。
問題は、['DataSetConverter'](https://github.com/JamesNK/Newtonsoft.Json/blob/master/Src/Newtonsoft.Json/Converters/DataSetConverter.cs#L89)のNewtonsoftのハードコードを使用しているようです'DataTableConverter converter = new DataTableConverter();'を実行して、 'DataTableConverter'を呼び出します。 'DataSetConverter'の独自のバージョンを作成する必要があるかもしれません。 – dbc
迅速な対応をありがとう! '' DataSetConverter''をオーバーライドしてみましょう – JEllery