0
我有以下的WebAPI动作insed控制器(例如):接收抽象类型作为输入
public MyAbstractClass Action1(MyAbstractClass input)
{
return input;
}
类结构是如下所示:
public class MyAbstractClass
{
public int ID {get;set;}
public string Name {get;set;}
}
public class ConcreteClass1 : MyAbstractClass
{
public string Foo {get;set;}
}
public class ConcreteClass1 : MyAbstractClass
{
public string Bar {get;set;}
}
我湾进行呼叫到WebAPI Action1
用描述其中一个具体类的JSON,但它总是返回null。
我已经把我的格式是这样的:
public static void Configure(MediaTypeFormatterCollection formatters)
{
var jsonFormatter = formatters.JsonFormatter;
var settings = jsonFormatter.SerializerSettings;
settings.Formatting = Formatting.Indented;
settings.TypeNameHandling = TypeNameHandling.Objects;
settings.ContractResolver = new CamelCaseExceptDictionaryKeysResolver();
}
private class CamelCaseExceptDictionaryKeysResolver : CamelCasePropertyNamesContractResolver
{
protected override JsonDictionaryContract CreateDictionaryContract(Type objectType)
{
JsonDictionaryContract contract = base.CreateDictionaryContract(objectType);
contract.DictionaryKeyResolver = propertyName => propertyName;
return contract;
}
}
注意我有一个自定义的解析器。我将settings.TypeNameHandling = TypeNameHandling.Objects;
,所以我发送POST请求难熬JSON看起来像这样:
{
"$type": "MyNameSpace.SubNameSpace.ConcreteClass1"
"id":100,
"name":"some name",
"foo":"some value of foo..."
}
,但仍然收到null
作为输出..意思是消毒器无法使具体的类别失去理性。
我在这里错过了什么?