0

このコードを使用してケンブリッジ辞書の Web サイトから JSon 文字列を取得していますが、文字列を解析できません。

   public partial class Form1 : Form
{

        public Form1()
    {
        InitializeComponent();
    }
SkPublishAPI api = new SkPublishAPI("https://dictionary.cambridge.org/api/v1/", "MyaccessCode");

IList<IDictionary<string, object>> dictionaries = JsonToArray(api.GetDictionaries());

public class dictionaryNames
        {
            public string dictionaryName { get; set; }
            public string dictionaryCode { get; set; }
            public string dictionaryUrl { get; set; }
        }
private static IDictionary<string, object> JsonToObject(string json)
        {
            JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
            IDictionary<string, object> obj = jsonSerializer.Deserialize<IDictionary<string, object>>(json);
            return obj;
        }

    private static IList<IDictionary<string, object>> JsonToArray(string json)
    {
        JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
        IList<IDictionary<string, object>> array = jsonSerializer.Deserialize<IList<IDictionary<string, object>>>(json);
        return array;
    }

    private static string ObjectToJson(object obj)
    {
        JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
        string json = jsonSerializer.Serialize(obj);
        return json;
    }

Json文字列は次のように応答します

[
{
    "dictionaryName": "Cambridge Advanced Learner's Dictionary",
    "dictionaryCode": "british",
    "dictionaryUrl": "http://dictionary.cambridge.org/dictionary/british/"
},
{
    "dictionaryName": "Cambridge Learner's Dictionary English-Turkish",
    "dictionaryCode": "turkish",
    "dictionaryUrl": "http://dictionary.cambridge.org/dictionary/turkish/"
},
{
    "dictionaryName": "Cambridge Dictionary of American English",
    "dictionaryCode": "american-english",
    "dictionaryUrl": "http://dictionary.cambridge.org/dictionary/american-english/"
},
{
    "dictionaryName": "Cambridge Business English Dictionary",
    "dictionaryCode": "business-english",
    "dictionaryUrl": "http://dictionary.cambridge.org/dictionary/business-english/"
},
{
    "dictionaryName": "Cambridge Learners Dictionary",
    "dictionaryCode": "learner-english",
    "dictionaryUrl": "http://dictionary.cambridge.org/dictionary/learner-english/"
}

]

この Json 文字列を逆シリアル化するにはどうすればよいですか。いろいろ試しましたができませんでした。C# が初めてなので、逆シリアル化コードを書きませんでした。あなたの助けを待っています。ありがとうございました

4

1 に答える 1

1
var dictionaries = new JavaScriptSerializer()
                       .Deserialize<List<dictionaryNames>>(json);

public class dictionaryNames
{
    public string dictionaryName { get; set; }
    public string dictionaryCode { get; set; }
    public string dictionaryUrl { get; set; }
}

JsonToObjectPS:メソッドは次のように記述できます。

private static T JsonToObject<T>(string json)
{
    JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
    T obj = jsonSerializer.Deserialize<T>(json);
    return obj;
}

次のように使用します。

List<dictionaryNames> dictionaries = JsonToObject<List<dictionaryNames>>(json);
于 2013-09-18T18:58:19.067 に答える