我在Windows Phone 7中创建了一个Web服务应用程序。这是从下面的uri获取的JSON数组。 ... [{ “ID”:4 “名称”: “班加罗尔”},{ “ID”:1, “名称”: “奈”},{ “ID”:3 “名称”: “海得拉巴” },{ “ID”:2 “名称”: “孟买”}] ...
列表项=(列表)ds.ReadObject(msnew); 在这一行中有一个错误(它在运行时说)。 反序列化type对象时出错。根级别的数据无效。第1行,第1位。
编码:
public MainPage() { 的InitializeComponent(); }
[DataContract]
public class Item
{
[DataMember]
public int id
{
get;
set;
}
[DataMember]
public string name
{
get;
set;
}
}
private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
{
WebClient wc = new WebClient();
wc.DownloadStringAsync(new Uri("http://75.101.161.83:8080/CityGuide/Cities?authId=CITY4@$pir*$y$t*m$13GUID*5"));
wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
}
void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
string MyJsonString = e.Result;
// MessageBox.Show(e.Result);
DataContractSerializer ds = new DataContractSerializer(typeof(Item));
MemoryStream msnew = new MemoryStream(Encoding.UTF8.GetBytes(MyJsonString));
List<Item> item = (List<Item>)ds.ReadObject(msnew);
}
答案 0 :(得分:9)
你要做的事情有两个错误。
您使用DataContractSerializer
代替DataContractJsonSerializer
。您尝试使用的是期望XML,而不是JSON。
您正在尝试反序列化为单个Item
,然后将其转换为List<Item>
,而不是数组,这是json包含的内容。
请改为尝试:
var ds = new DataContractJsonSerializer(typeof(Item[]));
var msnew = new MemoryStream(Encoding.UTF8.GetBytes(MyJsonString));
Item[] items = (Item[])ds.ReadObject(msnew);
如果您以后想要,可以将数组转换为列表。
答案 1 :(得分:1)
您可以从Silverlight SDK添加System.Json库。
它不是为WP7编译的,但对我来说它工作正常。