OData V4:没有在类

时间:2017-09-16 09:32:44

标签: c# json odata deserialization

经过长时间的研究,没有解决方案,我决定在这里发一个问题。 我正在做的是实现OData读取,写入,更新和删除实体。 所以,现在我能够使用Odata读取,创建和删除实体,但我要求不应该有任何没有参数的公共构造函数(它现在受到保护)。好吧,每当我将公共构造函数更改为protected时,我就会在创建新实体时遇到错误(在ModelState中):{"没有为此对象定义无参数构造函数。"}在{{1 ODataController方法 我想知道是否有一些我可以设置的设置,所以它也会使用受保护的构造函数,就像Newtonsoft JsonConverter那样:

Post

这是我的班级:

JsonSerializerSettings settings = new JsonSerializerSettings();
settings.ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor;
var ODataResult = JsonConvert.DeserializeObject<OData<T>>(entitiesJson, settings);

配置:

public class Product
{
    protected Product() { }
    public Product(string id, string name)
    {
        Id = id;
        Name = name;
    }
    public string Id { get; set; }
    public string Name { get; set; }
}

Controller的Post方法:

     public class ODataConfiguration
            {
                public void Configuration(IAppBuilder appBuilder)
                {
                    HttpConfiguration config = new HttpConfiguration();
 config.Formatters.JsonFormatter.SerializerSettings.ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor;
                    var builder = new ODataConventionModelBuilder();
                    builder.EntityType<Product>();
                    builder.EntitySet<Product>("Product").EntityType.Name = "Product";
                    config.MapODataServiceRoute("ODataApi", null, builder.GetEdmModel());
                    appBuilder.UseWebApi(config); 
                }
            }
post方法参数中的

实体字段为空,我检查ModelState并看到上面提到的错误。

问题是,我希望OData反序列化器看到受保护的构造函数,或者用Newtonsoft.Json反序列化器替换默认的OData反序列化器。

更新 经过一些研究后,我找到了设置ConstructorHandling的方法,但没有帮助:

 public async Task<IHttpActionResult> Post([FromBody]Product entity)
    {
        return null;
    }

我可以研究的任何想法或方向? 谢谢。

0 个答案:

没有答案