2012-05-01 75 views
3

好的,我對此有些困難。解析包含Windows Phone 7數組的JSON對象

我的JSON是像

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

我要怎樣做this tutorial但是,由於不同的JSON,它並沒有奏效。

我有什麼把這個方法裏面? 我不知道是否最好創建一個包含我的列表或直接使用JsonObject的「包裝」類。你能給我一個片段嗎?我在C#中有點新鮮。

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

在此先感謝!

+1

http://json2csharp.com/將成爲你的朋友。它根據JSON字符串創建類和成員。它可以節省很多時間! – Gero

回答

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

-1。 OP不使用Json.NET –

+0

@Mike_G OP也不使用'DataContractJsonSerializer'。我只看到'DataContractJsonSerializer ser = null;'這是對**工作**代碼的downvote的唯一解釋嗎? –

+0

是的,它的工作原理!非常感謝!如果有人需要一個字符串(就像我),只需把obj [「name」]。ToString()。也許這是白熱化的,但正如我所說,我是C#新手! – Enrichman

1

我使用JSON.NET(http://james.newtonking.com/projects/json-net.aspx)正常,所以我的代碼可能會略有不同。

對於列表的內容我會去一類的名稱屬性那樣:

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

那麼你應該能夠JSON.NET反序列化List<NameClass>

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

這是從我的腦海裏寫出來的,所以也許它不能用複製和粘貼來編譯,但它應該作爲一個樣本。

+0

-1由於OP的json字符串不是數組或列表,因此不起作用。易於測試 –

+0

已經監督了對根類的需求。 @ L.B:感謝您指出 – Sascha

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); 
+0

-1由於OP的json字符串不是數組或列表,因此不起作用。易於測試。 –

+0

當然它不工作,它不是一個程序哈哈。他不想爲他完成,他問下一步該做什麼。正如你所看到的,我展示了完成他的任務的兩個主要組件。大聲笑,一些人...... –

+0

你的答案試圖反序列化OP的json字符串到**列表而不是根對象**,你現在說'當然它不工作。好的政策來回答。隨意寫任何東西,因爲你不希望它運行。大聲笑 –