当我可以调用第三方api并获取单个类的数据时,所有内容都使用此代码进行反序列化
TheUser me = jsonSerializer.Deserialize(response, typeof(TheUser)) as TheUser
Run Code Online (Sandbox Code Playgroud)
当我尝试反序列化作为数组的JSON响应内容时会出现问题,例如
{
"data": [
{
"name": "A Jones",
"id": "500015763"
},
{
"name": "B Smith",
"id": "504986213"
},
{
"name": "C Brown",
"id": "509034361"
}
]
}
Run Code Online (Sandbox Code Playgroud)
如果我在"data"成员周围使用自定义包装类并且该成员需要是类型,我只能使序列化工作List<object>
.如果它有类型List<TheUser>
我ArgumentException
从JsonParser DesializeType
方法得到它们.
我原本试图在没有像这样的包装类型的情况下进行序列化
List<TheUser> freinds = jsonSerializer.Deserialize(response, typeof(List<TheUser>)) as List<TheUser>;
Run Code Online (Sandbox Code Playgroud)
但这只会给我一个空集合.当然,我必须能够将数组反序列化为强类型列表.
我正在使用Hammock框架从Silverlight应用程序到Rest服务进行异步服务调用.在'完成'回调中,我正在更新一个ObservableCollection,它绑定到视图上的组合框.
"OnPropertyChanged"事件处理程序中抛出了"无效的跨线程访问"异常.
这是因为Hammock没有在UI线程上执行回调吗?如果没有,为什么不呢?这似乎是框架应该处理的功能.我错过了什么吗?我确定不想在每个完成的处理程序中自己处理UI线程的调用.
public void LoadMyData()
{
var request = new RestRequest();
request.Path = "MyRestUrlText";
var callback = new RestCallback(
(restRequest, restResponse, userState) =>
{
var visibleData = new ObservableCollection<MyDataType>();
var myData = JsonConvert.DeserializeObject<MyDataType[]> restResponse.Content);
foreach (var item in myData)
visibleData .Add(item);
this.MyBoundCollection = visibleData;
OnPropertyChanged("MyBoundCollection");
});
var asyncResult = _restClient.BeginRequest(request, callback);
}
Run Code Online (Sandbox Code Playgroud)
谢谢