在反序列化时使用动态和强制执行 WCF 合同

Posted

技术标签:

【中文标题】在反序列化时使用动态和强制执行 WCF 合同【英文标题】:Using Dynamic and enforcing WCF contract upon Deserialization 【发布时间】:2020-11-11 04:15:37 【问题描述】:

我有两个模型类IntroModelPhonePageModel。这些都是 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 合同的主要内容,如果未能解决你的问题,请参考以下文章

Gson 在反序列化对象时忽略 null

在反序列化期间获取任何深度的XMLElement

Protobuf-net r282 在反序列化使用 r249 序列化的对象时遇到问题

ServiceStack 文本设置以在反序列化 json 时推断原始值类型

在反序列化时如何忽略JSON对象数组中的空白数组?

Spring数据redis在反序列化List类型时返回null