/ / Verwenden von DataContractJsonSerialiser zum Analysieren einer Json-Datei - c #, Serialisierung, Windows-Phone-7, Datacontractserializer

Verwenden von DataContractJsonSerialiser zum Analysieren einer JSON-Datei - c #, Serialisierung, Windows-Phone-7, DataContractSerializer

Ich habe eine Json-Datei, die ich mit TexturePacker exportiert habe, und dieses Format wird erzeugt.

{"frames": {

"But_01_Highlight.png":
{
"frame": {"x":0,"y":0,"w":280,"h":41},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":7,"y":8,"w":280,"h":41},
"sourceSize": {"w":294,"h":57}
},

Ich folgte einem Tutorial, wo Sie gerade konntenverwandeln Sie es in ein Array, aber das ist auf Windows Phone 7 nicht verfügbar.

Wie würde ich ein Objekt mit einem Datenvertrag erstellen, um dieses Format zu laden?

Meine Frage ähnelt auch der folgenden Frage https://stackoverflow.com/questions/3769322/datacontractjsonserializer-with-arbitrary-key-names das hat keine Antwort

@ Andreas Löw, wenn man in ein Format exportieren könnte, wäre es toll.

{"frames":[
{
"filename": "But_01_Highlight.png",
"frame": {"x":0,"y":0,"w":280,"h":41},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":7,"y":8,"w":280,"h":41},
"sourceSize": {"w":294,"h":57}
},
...
]

Antworten:

1 für die Antwort № 1

Das Werkzeug bei http://carlosfigueira.me/JsonUtilities/JsonToContract.htm (beschrieben im Blog-Post http://blogs.msdn.com/b/carlosfigueira/archive/2011/01/11/inferring-schemas-for-json.aspx) kann verwendet werden, um ein Objektdiagramm zu erstellen, das kannverwendet werden, um diese JSON mit dem DataContractJsonSerializer zu deserialisieren. Dies ist die Ausgabe des Tools (ich musste den Namen der Klasse "But_01_Highlight.png" aufgrund eines Fehlers im Tool in "But_01_Highlight_png" ändern).

Dies funktioniert auch, da alle JSON-Daten vorhanden sindfolgt demselben "Schema". Ist dies nicht der Fall, ist der DataContractJsonSerializer nicht die beste Option dafür. Für WP7 können Sie einige JSON-Bibliotheken wie die Klassen in der verwenden System.Json-Namespace (Sie müssen einen Verweis auf die System.Json.dll aus dem Silverlight 3.0-SDK hinzufügen.)

[System.Runtime.Serialization.DataContractAttribute()]
public partial class FrameClass
{

[System.Runtime.Serialization.DataMemberAttribute()]
public int x;

[System.Runtime.Serialization.DataMemberAttribute()]
public int y;

[System.Runtime.Serialization.DataMemberAttribute()]
public int w;

[System.Runtime.Serialization.DataMemberAttribute()]
public int h;
}

[System.Runtime.Serialization.DataContractAttribute()]
public partial class SourceSizeClass
{

[System.Runtime.Serialization.DataMemberAttribute()]
public int w;

[System.Runtime.Serialization.DataMemberAttribute()]
public int h;
}

[System.Runtime.Serialization.DataContractAttribute()]
public partial class But_01_Highlight_pngClass
{

[System.Runtime.Serialization.DataMemberAttribute()]
public FrameClass frame;

[System.Runtime.Serialization.DataMemberAttribute()]
public bool rotated;

[System.Runtime.Serialization.DataMemberAttribute()]
public bool trimmed;

[System.Runtime.Serialization.DataMemberAttribute()]
public FrameClass spriteSourceSize;

[System.Runtime.Serialization.DataMemberAttribute()]
public SourceSizeClass sourceSize;
}

[System.Runtime.Serialization.DataContractAttribute()]
public partial class FramesClass
{

[System.Runtime.Serialization.DataMemberAttribute(Name = "But_01_Highlight.png")]
public But_01_Highlight_pngClass But_01_Highlight_png;
}

[System.Runtime.Serialization.DataContractAttribute()]
public partial class RootClass
{

[System.Runtime.Serialization.DataMemberAttribute()]
public FramesClass frames;
}