我在 Windows Phone 7 中创建了一个 Web 服务应用程序。这是从下面的 uri 获取的 JSON 数组。 ...[{"id":4,"name":"类加罗尔"},{"id":1,"name":"钦奈"},{"id":3,"name":"海得拉巴"},{"id":2,"name":"孟买"}]...
列表项 = (List)ds.ReadObject(msnew); 在这一行中有一个错误(它说在运行时)。 反序列化 type 的对象时出错。根级别的数据无效。第 1 行,位置 1。
编码:
公共(public)主页() { 初始化组件(); }
[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);
}
最佳答案
您尝试执行的操作存在 2 个错误。
您正在使用
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);
如果您以后愿意,可以将数组转换为列表。
关于.net - 如何从 Web 服务 JSON 数组或对象反序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4439020/