Windows Phone解析json数据?来自Url的用户输入?

时间:2014-05-28 05:58:23

标签: c# json windows-phone-8

我跟着this创建了Restful Web Services,它从MySQL数据库中将JSON显示为OutPut。

我成功完成了它,但在这里我在数据库中有近100个不同名称的表

我正在获得这种Json数据

{"WindowsResult":[{"ID":9,"TYPE":"WindowsPhone","TITLE":"XYZ","PRICE":"$0","IMAGE":"Post1.jpg"}],"success":3}

这另一个结果

{"SonyResult":[{"ID":3,"TYPE":"SonyXperia","TITLE":"XYZ","PRICE":"$0","IMAGE":"Post2.jpg"}],"success":3}

另一个

{"SamsungResult":[{"ID":1,"TYPE":"Samsung","TITLE":"XYZ","PRICE":"$0","IMAGE":"Post3.jpg"}],"success":3}

为此,我正在从URL解析JSON数据 像localhost / Service1.svc / windows或localhost / Service1.svc / sony那样的

这里应该使用用户输入..

private void btnAdd_Click(object sender, RoutedEventArgs e)
{

string Data = txtData.Text;
string ServiceUri = "http://lhost:30576/Service1.svc/"
+ "Data" + "/";
WebClient proxy = new WebClient();
proxy.DownloadStringCompleted +=
new DownloadStringCompletedEventHandler(proxy_DownloadStringCompleted);
proxy.DownloadStringAsync(new Uri(ServiceUri));

}

但我在这里感到困惑

void webClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
 {
 var rootObject = JsonConvert.DeserializeObject<RootObject>(e.Result); 
 foreach (var TYPE in rootObject.SonyResult) 
 { 
 Console.WriteLine(type.TITLE);
 } 
 }

Root对象应该是什么 对于某些结果,我将SamsungResult作为Root对象 请建议我关于这个..

更新

当我输入像http://www.google.com/service1.scv/sony

这样的网址时

我正在

{"SonyResult":[{"ID":3,"TYPE":"SonyXperia","TITLE":"XYZ","PRICE":"$0","IMAGE":"Post2.jpg"}],"success":3}

就像每个品牌我都有一个结果Not All in one string ..

1 个答案:

答案 0 :(得分:1)

问题是你的json数据

{"Mobiles":[
   {"SonyResult":[{"ID":3,"TYPE":"SonyXperia","TITLE":"XYZ","PRICE":"$0","IMAGE":"Post2.jpg"}],"success":3},
   {"WindowsResult":[{"ID":9,"TYPE":"WindowsPhone","TITLE":"XYZ","PRICE":"$0","IMAGE":"Post1.jpg"}],"success":3}
]}


由于您没有为我们的表指定Root对象名称,因此json使用您的表名作为根对象。
它的C#类将是

public class SonyResult
{
public int ID { get; set; }
public string TYPE { get; set; }
public string TITLE { get; set; }
public string PRICE { get; set; }
public string IMAGE { get; set; }
}
public class WindowsResult
{
public int ID { get; set; }
public string TYPE { get; set; }
public string TITLE { get; set; }
public string PRICE { get; set; }
public string IMAGE { get; set; }
}
public class Mobile
{
public List<SonyResult> SonyResult { get; set; }
public int success { get; set; }
public List<WindowsResult> WindowsResult { get; set; }
}
public class RootObject
{
public List<Mobile> Mobiles { get; set; }
}


希望能解决你的问题。

更新
对于您收到的查询,C#类将是

public class SonyResult 
{public int ID { get; set; }
 public string TYPE { get; set; }
 public string TITLE { get; set; }
 public string PRICE { get; set; }
 public string IMAGE { get; set; }
}
public class RootObject
{
 public List<SonyResult> SonyResult { get; set; }
 public int success { get; set; }
}

现在,因为对于每个不同的模型,您将获得不同的查询,其中每个查询都是自己的数组,没有公共对象名称。因此,对于每个不同的模型,根对象类将有所不同。 我没有尝试过,因为我没有访问你的代码,但尝试这种格式是否有效(因为我没有尝试过,所以我怀疑这是否有效)。

public class SonyResult
{
public int ID { get; set; }
public string TYPE { get; set; }
public string TITLE { get; set; }
public string PRICE { get; set; }
public string IMAGE { get; set; }
}
public class WindowsResult
{
public int ID { get; set; }
public string TYPE { get; set; }
public string TITLE { get; set; }
public string PRICE { get; set; }
public string IMAGE { get; set; }
}
public class RootObject
{
public List<SonyResult> SonyResult { get; set; }
public int success { get; set; }
public List<WindowsResult> WindowsResult { get; set; }
}