2016-06-16 3 views
0

Mein Winform-Client fordert eine DataTable vom Server an, um sie dem Grid in Formularen zuzuweisen.
Der Server wird DataTable als JSON mithilfe von JSON.net zurückgeben.
Wir verwenden JArray.Parse, um die zurückgegebene Zeichenfolge zu lesen und dieses JArray Grid zuzuweisen.
Die Daten werden gut angezeigt, außer für DateTime-Felder.
Alle Felder mit DateTime-Typ haben Namen, die "DATE" oder "TIME" enthalten. Ich frage mich, ob es eine Möglichkeit gibt, JTokens, die zu diesen Feldern gehören, zu DateTime Format zu analysieren?
Wie erkennen Sie DateTime-Felder als solche, wenn Sie ein Json.net-JArray einem Grid zuweisen?

Ich bin mit C# mit VS2013 .Net 4.0

Mein lieferte json String ist:

[ 
    { "ORDER_ID":10, "CREATED_DATE":"20160617181008", "NOTE":"Hello" }, 
    { "ORDER_ID":20, "CREATED_DATE":"20160616140302", "NOTE":"Ciao" } 
] 

ich diese JSON-String parsen wie folgt:

JArray table = JArray.Parse(jsonString); 

Und ich zuweisen die Variable "table" zur DataSource des Grid Controls.
Ich verwende das folgende C# -Datumsformat: "yyyyMMddHHmmss".

Das Gitter wird angezeigt CREATED_DATE Spalte als: 20160617181008 und 20160616140302.

+0

1) Welche Sprache verwenden Sie? C#? vb.de? 2) Bitte bearbeiten Sie Ihre Frage, um ein Beispiel für den JSON zu zeigen, den Sie erhalten - als eingebetteten Text, nicht als Bild, damit wir ihn zum Testen in Visual Studio einfügen können. 3) Auch, bitte [bearbeiten] Ihre Frage zu zeigen, was Sie bisher versucht haben, das funktioniert nicht. Siehe [wie man fragt] (https://stackoverflow.com/help/how-to-ask). – dbc

+0

Bitte sehen Sie meine Bearbeitung – QuangND

Antwort

2

Am einfachsten wäre, wenn Sie könnten Ausgabe Termine und Zeiten von dem Server zu JSON in ISO 8601 format. Wenn eine Datumszeichenfolge in diesem Format formatiert ist, erkennt LINQ to JSON sie automatisch als DateTime und deserialisiert sie als solche. Details siehe Deserializing from JSON with LINQ und Serializing Dates in JSON.

Dass gesagt wird, können Sie nachbearbeiten Ihre JArray auf ein DateTime die value irgend property mit "DATE" oder "TIME" in seinem Namen zu konvertieren, wie folgt:

var table = JArray.Parse(jsonString); 

var format = "yyyyMMddHHmmss"; 
var culture = CultureInfo.InvariantCulture; // Change if necessary 
var style = DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal; // Change if necessary. 

foreach (var property in table.Descendants().OfType<JProperty>().Where(p => (p.Name.Contains("DATE") || p.Name.Contains("TIME")) && p.Value.Type == JTokenType.String)) 
{ 
    var value = (string)property.Value; 
    DateTime date; 
    if (DateTime.TryParseExact(value, format, culture, style, out date)) 
     property.Value = date; 
} 
+0

Vielen Dank, es funktioniert :) – QuangND

Verwandte Themen