Seite 1 von 1
Json Strings und Objekte in IronPython de/serialisieren
Verfasst: Mittwoch 4. Mai 2011, 11:37
von proofy
Moin Moin,
habe mal wieder etwas IronPython spezifisches aus der .NET Welt (Silverlight)
Wenn ich mit IronPython Json verarbeiten möchte gibt es zunächst die Entscheidung aus welcher Welt ich mich da bediene.
1) Dot Net:
http://james.newtonking.com/projects/json/help/
oder
2) eine reine Python Bibliothek verwenden, die auch unter IronPython im Silverlight Container funktioniert (also intern keine c-Bibliotheken verwendet)
bei 1 habe ich das Problem, dass ich nicht weiß, wie der Typ (also die Klasse) in Ironpython angegeben werden muss
c#:
Code: Alles auswählen
Product deserializedProduct = JsonConvert.DeserializeObject<Product>(output);
IronPython:?
und bei Variante 2 habe ich noch keine netten Libs gefunden, die direkt ein spezifisches Objekt erstellen können.
Hat jemand Tipps?
Vielen Dank im Voraus,
Sven
Re: Json Strings und Objekte in IronPython de/serialisieren
Verfasst: Mittwoch 4. Mai 2011, 22:57
von Dauerbaustelle
Das `json`-Modul in der Standard Library (> 2.5 iirc) ist in purem Python geschrieben (es gibt optional ne C-Extension, aber falls die nicht geladen werden kann, wird eben das Purepythonding genutzt).
"Direkt Objekt erzeugen"? Du meinst anstatt eines Dictionaries direkt eins von "deinen" Klassen verwenden? Das geht mit o.g. Library.
Re: Json Strings und Objekte in IronPython de/serialisieren
Verfasst: Freitag 6. Mai 2011, 14:58
von proofy
Dauerbaustelle hat geschrieben:Das `json`-Modul in der Standard Library (> 2.5 iirc) ist in purem Python geschrieben (es gibt optional ne C-Extension, aber falls die nicht geladen werden kann, wird eben das Purepythonding genutzt).
Ich hab das jetzt mal mit simplejson ausprobiert
http://code.google.com/p/simplejson/
Da hat es auf Anhieb nicht funktioniert, weil dort z.B. Decimal importiert wurde, was in der .NET Welt unter System liegt und nicht unter sys. Aber dies lies sich leicht verbessern.
Schwieriger ist es, dass str.decode() nicht vollständig in IronPython umgesetzt wurde (zumindest nicht in der Version, die ich gerade verwende) Dort fehlt der encoder 'hex'
Dauerbaustelle hat geschrieben:
"Direkt Objekt erzeugen"? Du meinst anstatt eines Dictionaries direkt eins von "deinen" Klassen verwenden? Das geht mit o.g. Library.
Ein Traum wäre es, wenn eine Funktion die gefundenen Json(Object)Attribute nimmt und guckt, ob diese als Property existiert und dann zuweist.
Re: Json Strings und Objekte in IronPython de/serialisieren
Verfasst: Freitag 6. Mai 2011, 15:16
von Dauerbaustelle
proofy hat geschrieben:Dauerbaustelle hat geschrieben:
"Direkt Objekt erzeugen"? Du meinst anstatt eines Dictionaries direkt eins von "deinen" Klassen verwenden? Das geht mit o.g. Library.
Ein Traum wäre es, wenn eine Funktion die gefundenen Json(Object)Attribute nimmt und guckt, ob diese als Property existiert und dann zuweist.
Wie soll das gehen? Python hat doch gar keine statische "Attributierung"?
Re: Json Strings und Objekte in IronPython de/serialisieren
Verfasst: Freitag 6. Mai 2011, 15:35
von proofy
Schon so etwas in der Art
http://docs.python.org/library/functions.html#property
Und darüber kann die .NET Welt auch zugreifen.
Re: Json Strings und Objekte in IronPython de/serialisieren
Verfasst: Freitag 6. Mai 2011, 15:38
von lunar
@Dauerbaustelle: Es ging um Eigenschaften, nicht um allgemeine Attribute. Eigenschaften werden als Deskriptoren im Namensraum der zugeordneten Klasse deklariert, und Klassen sind im Regelfall schon relativ statisch. Die gewünschte Funktion zu schreiben, ist mithin auch nicht schwer:
Code: Alles auswählen
def update_properties_from_mapping(obj, mapping):
for key, value in mapping.iteritems():
if isinstance(getattr(type(obj), key, None), property):
setattr(obj, key, value)
"mapping" kann jedes mögliche Wörterbuch sein, also auch eines, dass aus JSON deserialisiert wurde.
Re: Json Strings und Objekte in IronPython de/serialisieren
Verfasst: Freitag 6. Mai 2011, 16:44
von proofy
@lunar, wau, vielen Dank