json länge - Wie man ein JObject zu.NET Objekt deserialisiert




für meta (3)

Aus der Dokumentation habe ich das gefunden

JObject o = new JObject(
   new JProperty("Name", "John Smith"),
   new JProperty("BirthDate", new DateTime(1983, 3, 20))
);

JsonSerializer serializer = new JsonSerializer();
Person p = (Person)serializer.Deserialize(new JTokenReader(o), typeof(Person));

Console.WriteLine(p.Name);

Die Klassendefinition für Person sollte kompatibel sein mit:

class Person {
    public string Name { get; internal set; }
    public DateTime BirthDate { get; internal set; }
}

Bearbeiten

Wenn Sie eine aktuelle Version von JSON.net verwenden und keine benutzerdefinierte Serialisierung benötigen, lesen Sie bitte die Antwort von TienDo oben (oder unten, wenn Sie mich auffrischen: P), die übersichtlicher ist.

Ich verwende gerne die Newtonsoft JSON-Bibliothek . Zum Beispiel würde ich ein JObject von einem .NET-Objekt erstellen, in diesem Fall eine Instanz von Exception (möglicherweise oder nicht eine Unterklasse)

if (result is Exception)
    var jobjectInstance = JObject.FromObject(result);

Jetzt weiß ich, dass die Bibliothek JSON-Text (dh eine Zeichenkette) zu einem Objekt deserialisieren kann

// only works for text (string)
Exception exception = JsonConvert.DeserializeObject<Exception>(jsontext); 

aber was ich suche ist:

// now i do already have an JObject instance
Exception exception = jobjectInstance.????

Nun, es ist klar, dass ich von JObject zurück zu JSON-Text gehen und dann die Deserialize-Funktionalität verwenden kann, aber das scheint mir rückwärts zu gehen.


Laut diesem post ist es jetzt viel besser:

// pick out one album
JObject jalbum = albums[0] as JObject;

// Copy to a static Album instance
Album album = jalbum.ToObject<Album>();

Dokumentation: Konvertiere JSON in einen Type


Ich habe eine vollständige Funktion erstellt, um festzustellen, ob das Objekt leer ist.

Es verwendet wenn möglich developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… von ECMAScript 5 (ES5), um die beste Leistung (siehe Kompatibilitätstabelle ) und Rückschläge auf den am besten kompatiblen Ansatz für ältere Engines (Browser) zu erzielen.

Lösung

/**
 * Returns true if specified object has no properties,
 * false otherwise.
 *
 * @param {object} object
 * @returns {boolean}
 */
function isObjectEmpty(object)
{
    if ('object' !== typeof object) {
        throw new Error('Object must be specified.');
    }

    if (null === object) {
        return true;
    }

    if ('undefined' !== Object.keys) {
        // Using ECMAScript 5 feature.
        return (0 === Object.keys(object).length);
    } else {
        // Using legacy compatibility mode.
        for (var key in object) {
            if (object.hasOwnProperty(key)) {
                return false;
            }
        }
        return true;
    }
}

Hier ist der Gist für diesen Code.

Und hier ist das JSFiddle mit Demonstration und einem einfachen Test.

Ich hoffe es hilft jemandem. Prost!





.net json exception serialization json.net