C#WebAPI没有正确地序列化动态属性

Jac*_*ler 5 c# odata asp.net-web-api asp.net-web-api2

我正在创建一个新的C#OData4 Web API,其中一个名为Call具有动态属性的类,OData 4允许通过"Open Types".我相信我已经设置了所有内容并正确配置它,但序列化响应不包括动态属性.

我配置错了吗?

public partial class Call 
{
    public int Id { get; set; }
    public string Email { get; set; }
    public IDictionary<string, object> DynamicProperties { get; }
}
Run Code Online (Sandbox Code Playgroud)
public class CallController : ODataController
{
    [EnableQuery]
    public IQueryable<Call> GetCall([FromODataUri] int key)
    {
        return _context.Call.GetAll();
    }
}
Run Code Online (Sandbox Code Playgroud)
public static partial class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        AllowUriOperations(config);

        ODataModelBuilder builder = new ODataConventionModelBuilder();
        builder.ComplexType<Call>();
        var model = builder.GetEdmModel();

        config.MapODataServiceRoute(RoutePrefix.OData4, RoutePrefix.OData4, model);    
    }

    private static void AllowUriOperations(HttpConfiguration config)
    {
        config.Count();
        config.Filter();
        config.OrderBy();
        config.Expand();
        config.Select();
    }
}
Run Code Online (Sandbox Code Playgroud)

Jac*_*ler 0

如果密钥对中的值是,则null该属性根本不会被序列化。我原以为它会被连载到

“键”:空

这里有一些额外的例子

DynamicProperties.Add("somekey", 1);
Run Code Online (Sandbox Code Playgroud)

“某个键”:1


DynamicProperties.Add("somekey", "1");
Run Code Online (Sandbox Code Playgroud)

“某个键”:“1”


DynamicProperties.Add("somekey", null);
Run Code Online (Sandbox Code Playgroud)