我遇到了这个问题,我需要将JSON反序列化为动态类型,现在我已经解决了这个问题,
var typeObject = System.Reflection.Assembly.GetExecutingAssembly().GetType("SalesForceEndpoints.Models.BaseAccount");
var accountToCreate = JsonConvert.DeserializeObject(body.Data.ToString(), typeObject);
var result = client.Create(accountToCreate);
我可以看到它成功地创建了一个自定义BaseCount类型的对象。然而,当我试图将其传递给我在Salesforce中使用的API时,它失败了。我对类型进行了显式转换测试,效果很好,
var stronglyTypedAccountToCreate = JsonConvert.DeserializeObject<BaseAccount>(body.Data.ToString());
var result2 = client.Create(stronglyTypedAccountToCreate);
在Visual Studio中查看我的两个对象时,乍一看它们似乎是相同的,
然后我在手表的“类型”栏下注意到了这一点,
动态强制转换对象列为
对象{SalesForceEndpoints.Models.BaseCount}
显式强制转换对象列为
SalesForceEndpoints。模型。基本帐户
我几乎可以肯定,这是阻止我成功执行调用的原因,有什么想法吗?这里出了什么问题,以及如何执行动态运行时转换来模拟显式编译时转换?
---编辑---
我发现了问题的一部分。当我调用Create函数时,Create函数试图提取泛型类型,当它被动态强制转换时,它在这里作为对象而不是帐户。
public IResponse<string> Create<T>(T obj) where T : new()
{
try
{
var typeName = typeof(T).Name.Replace("Base", "");
var result = _api.Create(typeName, obj);
return new SuccessResponse<string>(ResponseResult.Success, result);
}
catch (Exception ex)
{
return new FailureResponse<string>(ResponseResult.Failure, $"Unable to create record. | {ex.Message}");
}
}
如果有人知道为什么对对象的动态强制转换是作为对象{ModelObject}而不仅仅是ModelObject来实现的,那还是有点奇怪。