在反序列化时使用动态和强制执行 WCF 合同
Posted
技术标签:
【中文标题】在反序列化时使用动态和强制执行 WCF 合同【英文标题】:Using Dynamic and enforcing WCF contract upon Deserialization 【发布时间】:2020-11-11 04:15:37 【问题描述】:我有两个模型类IntroModel
和PhonePageModel
。这些都是 WCF 合同。
我正在调用一个返回 JSON 的 API,并假设我以字符串格式存储它。
String myApiData = myAPI.getTodaysInfo();
使用函数枚举参数,我想反序列化为正确的模型类型
IntroPageModel introPageModel = null;
PhonePageModel phonePageModel = null;
if (enumVal == myEnums.IntroPage)
introPageModel = JsonConvert.DeserializeObject<IntroPageModel>(myApiData);
else if (enumVal == myEnums.PhonePageModel)
phonePageModel = JsonConvert.DeserializeObject<PhonePageModel>(myApiData);
这在我的代码后面留下了问题,尽管检查哪个模型不为空以知道以后要使用哪个模型。相反,我是否可以使用动态但仍确保来自 myApiData
的信息根据正确的 WCF 页面模型得到正确验证?
dynamic myPageModel = null;
if (enumVal == myEnums.IntroPage)
myPageModel = JsonConvert.DeserializeObject<IntroPageModel>(myApiData);
else if (enumVal == myEnums.PhonePageModel)
myPageModel = JsonConvert.DeserializeObject<PhonePageModel>(myApiData);
【问题讨论】:
【参考方案1】:假设您将 todayinfo 作为结果数组而不是对象,它将是这样的:
[
[
"IntroModelid": 1,
"IntroModelname": "intro123",
"guid": "151512321312",
"introModelfunc": [
"funcid": 1,
"funcname": "func123"
]
],
[
"PhonePageModelid": 1,
"PhonePageModelname": "phone123",
"other": "other",
"phonenumers": [
"numersid": 1,
"numbers": 6789,
"status": "OK"
,
"numersid": 2,
"numbers": 12345,
"funcionamiento": "NO"
]
]
]
当你得到你的收藏时:
var myapidata = JsonConvert.DeserializeObject(myApiDataString);
你将有两个 ChildrenTokens = Count = 2
您可以根据需要对其进行迭代。或者你可以传递给你的班级列表
var myapidata = (JArray)JsonConvert.DeserializeObject(json);
var IntroPageModel = myapidata [0];
var PhonePageModel = myapidata [1];
希望你觉得有用
【讨论】:
尝试阅读此newtonsoft.com/json/help/html/Samples.htm以上是关于在反序列化时使用动态和强制执行 WCF 合同的主要内容,如果未能解决你的问题,请参考以下文章
Protobuf-net r282 在反序列化使用 r249 序列化的对象时遇到问题