在winform中调用WebApi的问题

aierda 2018-08-29 04:45:58
背景:
服务端是用ABP构建的WebApi,客户端是用winform;
客户端通过WebRequest去访问WebApi.
问题:
客户端和服务端使用的实体类不一样,(即Entity类/Model类不一样,比如Student类,在客户端和服务端可能会有出入)
因为不在同一个解决方案里面。那么问题来了,客户端获取json字符串后反序列成强类型就没法处理。这个问题要如何
解决呢?期待大家的指点,谢谢!~
...全文
603 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
我是小数位 2018-09-04
  • 打赏
  • 举报
回复
JObject data = JObject.Parse(js);
foreach (JToken kv in data.Children())
{
var property = kv as JProperty;
...
}


有是什么取什么,你可以用上面的组成dynamic对像或者datatable都可以
mirrorspace 2018-08-31
  • 打赏
  • 举报
回复
这是个请求API的过程,拿到的一般是JSON数据.
根本就不需要对应实体类.
请求端需要自己建立对应的实体类
  • 打赏
  • 举报
回复
引用 8 楼 aierda 的回复:
[quote=引用 4 楼 xomix 的回复:]
hashtable接过来筛选你需要的项目即可

什么意思,没明白,请 问有相关的资料吗?[/quote]

客户端获取json字符串后并不序列化成实体类而是转换成HashTable:

/// <summary>
/// Json转Hashtable
/// </summary>
/// <param name="json"></param>
/// <returns></returns>
public static Hashtable Json2Hashtable(string json)
{
return JsonConvert.DeserializeObject<Hashtable>(json);
}


   /// <summary>
/// Json转Hashtable
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="json"></param>
/// <returns></returns>
public static List<T> Json2ListHashtable<T>(string json)
{
return JsonConvert.DeserializeObject<List<T>>(json);
}



使用的时候按照实际需求读取HashTable里面对应字段的值即可,这样你只要确认有一些key对象,服务器端新增对你没有影响。

正怒月神 版主 2018-08-30
  • 打赏
  • 举报
回复
因为不在同一个解决方案里面。那么问题来了,客户端获取json字符串后反序列成强类型就没法处理。这个问题要如何处理
1 创建对应的model
2 使用dynamic,不过这个方案,你还是要知道对方有啥属性。
说白了,就是把json转成你要的对象。
只要属性能映射就可以了。
aierda 2018-08-30
  • 打赏
  • 举报
回复
引用 4 楼 xomix 的回复:
hashtable接过来筛选你需要的项目即可

什么意思,没明白,请 问有相关的资料吗?
游北亮 2018-08-29
  • 打赏
  • 举报
回复
引用 5 楼 aierda 的回复:
你们说的不是不可以,但是比较麻烦,每次有修改,实体dll都要重新引用

按你们之前的作法,
有修改,2边的代码都要改,不是更容易出错?
dll只要改一个地方,引用又不会导致问题。

而且实体变更,基本上都要考虑向下兼容,避免有些客户端没有升级导致异常。

stevenjin 2018-08-29
  • 打赏
  • 举报
回复
以服务接口为标准去建实体类,反序列化,一般是这么做
aierda 2018-08-29
  • 打赏
  • 举报
回复
你们说的不是不可以,但是比较麻烦,每次有修改,实体dll都要重新引用
  • 打赏
  • 举报
回复
hashtable接过来筛选你需要的项目即可
  • 打赏
  • 举报
回复
不一样当然是以服务端为标准定义一样的请求实体咯
王志威丶 2018-08-29
  • 打赏
  • 举报
回复
实体类改成一样的咯
丰云 2018-08-29
  • 打赏
  • 举报
回复
首先,既然是winform程序,就应该用HttpRequest对象访问WebApi
其次,如果WeBAPI和winform都是自己公司的项目,
就可以把数据对象这块独立出来成为一个类库项目,
分别给webapi和winform引用就行了
这不过是很常见的分层手法

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧