标签: hammock

将JSON数组反序列化为强类型.NET对象

当我可以调用第三方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>ArgumentExceptionJsonParser DesializeType方法得到它们.

我原本试图在没有像这样的包装类型的情况下进行序列化

List<TheUser> freinds = jsonSerializer.Deserialize(response, typeof(List<TheUser>)) as List<TheUser>;
Run Code Online (Sandbox Code Playgroud)

但这只会给我一个空集合.当然,我必须能够将数组反序列化为强类型列表.

c# json.net windows-phone-7 hammock

43
推荐指数
5
解决办法
10万
查看次数

Silverlight应用程序中的跨线程访问无效

我正在使用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)

谢谢

.net silverlight thread-safety hammock

5
推荐指数
1
解决办法
8280
查看次数