问题描述
- WebService(axmx)如何实现完美跨平台?
-
A类,自定义类,用于描述原始参数,可以xml序列化
B类,自定义类,用于描述结果。无法xml序列化,可以二进制序列化。
需求场景:
用户需要输入指定格式的参数,得到指定格式的结果。实现跨平台特性。
实现过程:
用户以A类的xml序列化字符串形式提交一些数据到asmx(webService服务),
经过算法处理后返回B类的二进制序列化数组。问题:
在整个场景中,传输过程用到了xml格式的字符串和二进制数组,这些都能够实现跨平台。但是,原始参数和返回结果的序列化、反序列化过程依赖于类A、类B。这样的实现是否影响整个方案的跨平台特性?有没有优化的思路和方案?
解决方案
你可以自己解析xml构造对象,本身xml就是很简单的,你想复杂了。
解决方案二:
什么叫原始参数呢?还有新式参数吗?
楼主显然对web service概念没有了解到位。
既然web service基于xml,那么就一定有个xml语言标准,webservice采用wsdl来描述的。
所以你只要关注你要的平台如何提供标准wsdl序列化功能即可。
除了xml,json同样可以实现跨平台跨语言,如果你的服务基于http或https那推荐json作为标准输入输出。
当然xml也完全可行。
解决方案三:
问题在于输出结果(类型B)本身就无法xml序列化。所以用户收到的会是2进制数组(byte[])。这个怎么办?
所需要输出的结构类型(B类):
[Serializable]
public class PointAnalysisResults : CommonAbstractResults, IPointAnalysisResult
{
public PointAnalysisResults();
public List<ResultElement> IntensityAvgList { get; set; }
public List<ResultElement> NgList { get; set; }
public string PointName { get; set; }
public Dictionary<LightningStrikeDirectionEnum, double> RoseDistribution { get; set; }
}
序列化时报错类型:反射类型“LlsAnalysis.Entities.PointAnalysisResults”时出错。
时间: 2024-09-29 10:40:56