2011-07-26 12 views
1

TexturePackerを使用してエクスポートしたjsonファイルがあり、この形式が生成されます。私はあなただけの配列にそれを回すことができるが、それは私がすべてのフォーマットリバースエンジニアを持っているだけではなく、解析されてそれを読むように感じるのWindows Phone 7で利用できないチュートリアルを以下ましたDataContractJsonSerialiserを使用してjsonファイルを解析する

{"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} 
    }, 

この形式を読み込むためにdatacontractを使用してオブジェクトを作成するにはどうすればよいですか?

私の質問はまた、あなたが、それは素晴らしいことだそうのような形式にエクスポートすることができれば何も答え

@Andreas低持っていない、次の質問https://stackoverflow.com/questions/3769322/datacontractjsonserializer-with-arbitrary-key-namesに似ています。

{"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} 
    }, 
    ... 
    ] 

答えて

1

(ブログ投稿http://blogs.msdn.com/b/carlosfigueira/archive/2011/01/11/inferring-schemas-for-json.aspxに記載)http://carlosfigueira.me/JsonUtilities/JsonToContract.htmでツールはDataContractJsonSerializerを使用してそのJSONをデシリアライズするために使用することができるオブジェクト・グラフを作成するために使用することができます。これはツールの出力です(このツールのバグのために、クラス "But_01_Highlight.png"を "But_01_Highlight_png"に変更しなければなりませんでした)。

また、これはすべてのJSONデータが同じ「スキーマ」に従っていることを前提としています。これが当てはまらない場合、DataContractJsonSerializerはそのための最良のオプションではありません。 WP7のために、あなたは、このようなSystem.Json namespace上のクラスとして、いくつかのJSONライブラリを使用することができます(あなたがSilverlightの3.0 SDKからSystem.Json.dllへの参照を追加する必要があります)

[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; 
} 
+0

.pngのは、明らかにフィットしなければなりません文字列には値があり、このインスタンスにはクラス名ではありません。ツールへのリンクありがとうございます。 –

+0

はい、データコントラクト属性の「名前」プロパティを更新するのを忘れました。今はうまくいくはずです。 – carlosfigueira

+0

これは動作しません。.pngファイルリストがサービスによって動的に生成された場合はどうなりますか? "But_01_Highlight.png"は、シリアライザによって動的にロードされる必要があります。 –