【问题标题】:Using Dynamic and enforcing WCF contract upon Deserialization在反序列化时使用动态和强制执行 WCF 合同
【发布时间】: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);
}

【问题讨论】:

    标签: c# json wcf


    【解决方案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];
    

    希望你觉得有用

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    • 2021-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多