3

わかりました、私はこれでいくつかの困難を抱えています。

私のJSONは

{ "names" : [ {"name":"bla"} , {"name":"bla2"} ] }

このチュートリアルを実行しようとしましたが、JSONが異なるため、機能しませんでした。

このメソッドの中に何を入れる必要がありますか?リストを含む「ラップ」クラスを作成するのが良いのか、JsonObjectを直接使用するのが良いのかわかりません。スニペットを教えていただけますか?私はC#でちょっと新しいです。

void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
    {
        DataContractJsonSerializer ser = null;
        try
        {
           ???
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

前もって感謝します!

4

3 に答える 3

6

Json.Net (Windows Phoneをサポート)の使用

string json = @"{ ""names"" : [ {""name"":""bla""} , {""name"":""bla2""} ] }";

var dict = (JObject)JsonConvert.DeserializeObject(json);
foreach (var obj in dict["names"])
{
    Console.WriteLine(obj["name"]);
}

または、タイプセーフな方法で使用したい場合

var dict = JsonConvert.DeserializeObject<RootClass>(json);
foreach (var obj in dict.names)
{
    Console.WriteLine(obj.name);
}


public class RootClass
{
    public MyName[] names { get; set; }
}

public class MyName
{
    public string name { get; set; }
}
于 2012-05-01T19:33:53.023 に答える
1

.NET DataContractJsonSerializerを使用して、jsonオブジェクトをマップするクラスを定義する必要があります。このようなもの(私が正しく覚えている場合):

/// <summary>
/// 
/// </summary>
[DataContract]
public class Result
{
    /// <summary>
    /// 
    /// </summary>
    [DataMember(Name = "name")]
    public string Name
    { get; set; }
}

 /// <summary>
/// 
/// </summary>
[DataContract]
public class Results
{
    /// <summary>
    /// 
    /// </summary>
    [DataMember(Name = "names")]
    public List<Result> Names
    { get; set; }
}

次に、イベントハンドラーで:

DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Results));
var results = (Results)serializer.ReadObject(SOME OBJECT HOLDING JSON, USUALLY A STREAM);
于 2012-05-01T19:43:00.820 に答える
1

通常はJSON.NET(http://james.newtonking.com/projects/json-net.aspx)を使用しているため、コードが少し異なる場合があります。

リストの内容については、次のようなnameプロパティを持つクラスを選択します。

public class NameClass {
    public string name { get;set; }
}

次に、JSON.NETで逆シリアル化できるはずですList<NameClass>

List<NameClass> result = JsonConvert.Deserialize<List<NameClass>>(jsonString);

これは私の頭から書き出されているので、コピーアンドペーストではコンパイルされないかもしれませんが、サンプルとしては機能するはずです。

于 2012-05-01T19:29:40.267 に答える