1

Unity3d 3の新しいセキュリティ対策により、Web PlayerアプリケーションにLitJsonを使用するように制限されています。そうしないと、コンパイルされません。

この出力をオブジェクト(userEcoGet.textのコンテンツ)としてシリアル化する簡単な方法はありますか?

{"building_id":"1","building_level":"0","workers":"0","building_health":"100"}{"building_id":"2","building_level":"0","workers":"0","building_health":"100"}...{"building_id":"32","building_level":"0","workers":"0","building_health":"100"}

このコードは、JSONから最初のオブジェクトのみを入力します。

using UnityEngine;
using System.Collections;
using LitJson;
...
public EcoData localEcoData;
...
localEcoData = JsonMapper.ToObject<EcoData>(userEcoGet.text);
...
public class EcoData
{
    public string building_id;
    public string building_level;
    public string workers;
    public string building_health;
}

localEcoDataを配列に変換すると、コンストラクターエラーが欠落します。そして、この状況でコンストラクターを正しくネストする方法がわからないだけで、それが役立つかどうかさえわかりません。

この時点で、私はJsonReaderを使用して、オブジェクトを手動で入力することに頼っています。どんな助けでもいただければ幸いです。ありがとうございました。

編集:それはただクレイジーで、私が自分自身に課したくだらないJSONフォーマットのために今日一日中殺されました...

これは完全に機能するようになりました。localEcoData[1,2...32]は、すべての要素にアクセスできるオブジェクト配列です。

public EcoData[] localEcoData;
...
localEcoData = JsonMapper.ToObject<EcoData[]>(userEcoGet.text);

私がしなければならなかったのは、MySqlを処理するPHPページでJSONを正しく作成し、整然とUnityに転送することだけです。転送にアレイを使用せずに直接エコーしていました。これで、出力は次のようになり、うまく機能します。

[{"building_id":"1","building_level":"0","workers":"0","building_health":"100"}{"building_id":"2","building_level":"0","workers":"0","building_health":"100"}...{"building_id":"32","building_level":"0","workers":"0","building_health":"100"}]

ありがとう!

4

1 に答える 1

1

問題は JSON 自体にあると思われます。正しい形式ではありません。JSON 配列として解析するには、次の形式にする必要があります。

{
    result:[
                {"building_id":"1","building_level":"0","workers":"0","building_health":"100"},
                {"building_id":"2","building_level":"0","workers":"0","building_health":"100"},...
                {"building_id":"32","building_level":"0","workers":"0","building_health":"100"}
           ]
}

JSON を制御できない場合は、文字列を分割し、各文字列を単一の JSON オブジェクトとして扱い、配列内の各要素を C# オブジェクト型に変換する必要があります。

于 2011-02-09T21:29:09.753 に答える