我有以下模特课:
inline uint32_t is_not_zero(uint32x4_t v)
{
uint32x2_t tmp = vorr_u32(vget_low_u32(v), vget_high_u32(v));
return vget_lane_u32(vpmax_u32(tmp, tmp), 0);
}
我需要用他的fileds接收TextClass的实例。 我尝试做以下事情:
public class TrackModel
{
public string Field;
public ExampleClass Value;
}
public class ExampleClass
{
public string Type { get; set; }
}
public class TextClass : ExampleClass
{
public string TextField { get; set; }
public string ValueFiled { get; set; }
}
但每次“textTerm”都为空。
JSON请求:
public class DefaultController : ApiController
{
public string Post(TrackModel model)
{
TextClass textTerm = model.Value as TextClass;
return "something";
}
}
我需要这个类层次结构。我该如何正确映射? 也许JsonConverter? C这个例子中有人展示它是如何工作的?或者我可以听到解决这个问题的任何方法。
答案 0 :(得分:1)
属性Value
的类型为ExampleClass
。反序列化过程没有信息可以意识到它需要将Value
创建为TextClass
。
反序列化过程肯定会将Value
创建为ExampleClass
,因为它是唯一可以在没有更多信息的情况下执行的操作,然后当您尝试将其转换为TextClass
时,它会失败,因为该转换不会在这种背景下有意义。
您必须将Value
更改为键入TextClass
或为此定义自定义反序列化过程(老实说,我没有详细说明如何做到这一点)
答案 1 :(得分:1)
当请求到达服务器时,HttpRequest
的数据绑定到操作方法参数中使用的模型。在此过程中,内容被反序列化为对象。
如果您假设可以存在从ExampleClass
继承的各种类,那么模型绑定器应该如何知道请求包含的数据与而不是创建ExampleClass
TestClass
实例的数据{ {1}}应该被创建?
即使您可以使用这些类在客户端上编写对象,也只会将JSON传输到服务器。基于此JSON和操作的TrackModel
参数类型,开箱即用的模型绑定器只能创建ExampleClass
的实例。
解决此问题的一种方法是创建一个自定义模型绑定器,其中包含为您的特定需求创建正确对象的逻辑。有关绑定过程和自定义选项的详细信息,请参阅此link。