3

LitJSON ライブラリを使用していますが、少しおかしくなりました。

変換時にアクセントを保持する JSON ライブラリを知っていますか?

テストは次のとおりです。

test.json

[{"id":"CS_001","name":"L'élément","type":"Tôt"},{"id":"CS_002","name":"L'outrage","type":"Tôt"},{"id":"CS_003","name":"Test","type":"Tôt"}]

test.cs

public class test : MonoBehaviour {
    private string jsonString;
    private JsonData cardData;
    JsonData database;

    void Start () {
        jsonString = File.ReadAllText (Application.dataPath + "/test.json");
        cardData = JsonMapper.ToObject (jsonString);
        database = JsonMapper.ToJson (cardData);
        Debug.Log (database.ToString ());
    }
}

Debug.Log は次のようになります。

[{"id":"CS_001","name":"L'\u00E9l\u00E9ment","type":"T\u00F4t"},{"id":"CS_002","name":"L'outrage","type":"T\u00F4t"},{"id":"CS_003","name":"Test","type":"T\u00F4t"}]

適切な Json を取得する方法はありますか? 別の JSON ライブラリを使用している場合でも。

どうもありがとうございました。

4

3 に答える 3

4

コンテンツ タイプ: アプリケーション/json; charset=utf-8 は、UTF-8 文字エンコーディングでエンコードされた JSON 形式のコンテンツを指定します。JSON のデフォルトのエンコーディングは UTF-8 です。この場合、受信サーバーは、UTF-8 エンコーディングで JSON を処理していることを明らかに認識していないため、手動で変換する必要がある場合があります。

byte[] encodedBytes = Encoding.UTF8.GetBytes(jsonString);
Encoding.Convert(Encoding.UTF8, Encoding.Unicode, encodedBytes);

または、リクエストでコンテンツ タイプを指定してみてください。

content-type: application/json; charset=utf-8
于 2015-10-13T12:36:26.580 に答える
3

Json.Netを使用して文字列を逆シリアル化する例を次に示します。

using System;
using Newtonsoft.Json;
using System.Collections.Generic;

public class Program
{
    public static void Main()
    {
        // Deserialize the JSON into a list of CardData
        var ob = JsonConvert.DeserializeObject<List<CardData>>("[{\"id\":\"CS_001\",\"name\":\"L'élément\",\"type\":\"Tôt\"},{\"id\":\"CS_002\",\"name\":\"L'outrage\",\"type\":\"Tôt\"},{\"id\":\"CS_003\",\"name\":\"Test\",\"type\":\"Tôt\"}]" );

        /*
          The output will be:
            id: CS_001, name: L'élément, type: Tôt
            id: CS_002, name: L'outrage, type: Tôt
            id: CS_003, name: Test, type: Tôt
        */
        foreach(var i in ob){
            Console.WriteLine(i);  
        }
    }
}

// Class that will hold the deserialized data
// For demo puposes
public class CardData
{
    public string id { get; set; }
    public string name { get; set; }
    public string type { get; set; }

    public override string ToString(){
        return String.Format("id: {0}, name: {1}, type: {2}",id, name, type);   
    }
}

ライブデモはこちら

于 2015-10-13T13:17:06.193 に答える
0

間違ったエンコーディングを使用してテキスト ファイルを読み取った可能性があります。Encoding 引数を取り、UTF8 を渡す File.ReadAllTextのオーバーロードを使用してみてください。

于 2015-10-13T12:33:49.153 に答える