2011-02-17 6 views
2

Mon other question semble être trop générique, alors j'ai pensé que j'en créerais un nouveau sur les détails. Désolé si cela est considéré comme une mauvaise pratique. J'essaie de sérialiser des objets C# en chaînes JSON avec MonoTouch et l'espace de noms System.Json d'une manière qui ne nécessite pas que je descende moi-même à travers le (s) objet (s). Est-ce possible? Si oui, comment le faire correctement?Comment sérialiser en utilisant System.Json dans MonoTouch

La désérialisation fonctionne bien en transformant implicitement un JsonValue en une chaîne, int, quel que soit. De plus, descendre dans la hiérarchie n'est pas un problème. Comme si:

JsonValue json = JsonValue.Parse(jsonString); 
int mainValue = json["mainValue"]; 

JsonValue subValues = json["subValues"]; 
int subValue1 = subValues["subValue1"]; 

Le contraire n'est possible qu'avec les types élémentaires (string/int/...). Les autres objets ne peuvent pas être castés en JsonValue/JsonObject malheureusement. Pas même des structures vraiment simples avec seulement deux entrées.

// This works 
JsonValue json = new JsonObject(new KeyValuePair<string,JsonValue>("mainValue", 12345)); 

// Cannot (implicitly) convert type 'MyObjectType' to 'System.Json.JsonValue' 
MyObjectType myObject = new MyObjectType(); 
JsonValue subValues = myObject; 

// Cannot (implicitly) convert type 'MySimpleStruct' to 'System.Json.JsonObject' 
MySimpleStruct myStruct; 
myStruct.x = 1; 
myStruct.y = 2; 
JsonValue myStructJson = myStruct; 

Comme mon objet a plusieurs niveaux d'autres objets imbriqués au sein, en marchant à travers elle par moi-même et attribuer toutes les valeurs serait un grand PITA. Existe-t-il un moyen plus simple avec System.Json?

+0

La meilleure pratique aurait été de modifier la question initiale d'inclure cette information:) – Luke

+0

Lol ne soyez pas donc grossier @Luke;) mais je suis d'accord avec vous :) de toute façon j'espère que quelqu'un peut l'aider avec la question JSON ce n'est pas ma question: p – dalexsoto

Répondre

2

System.Json ne prend pas en charge la sérialisation arbitraire comme celle-ci.

Vous pouvez utiliser un tiers bibliothèque JSON comme Newtonsoft, ou attendre MonoTouch v4 qui aura DataContractJsonSerializer

+1

Quand le MT 4 sera-t-il publié? – dalexsoto

+1

meh ... DataContractJsonSerializer ne peut pas sérialiser les types anonymes et il vous oblige à décorer toutes vos classes en tant que DataContracts ... –

Questions connexes