[英]Dictionary<string, object> serialization in OData using ASP.Net MVC 5 and Web API 2.0
[英]OData in .NET Core Web API Serialization for List / Dictionary
我正在使用.NET Core 2.0.0和https://www.nuget.org/packages/microsoft.aspnetcore.odata
這是我到目前為止的設置。
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
...
services.AddOData();
services.AddSingleton<IODataModelManger, ODataModelManager>(DefineEdmModel);
...
}
private ODataModelManager DefineEdmModel(IServiceProvider services)
{
var modelManager = new ODataModelManager();
var builder = new ODataConventionModelBuilder();
builder.EntitySet<TestDTO>(nameof(TestDTO));
builder.EntityType<TestDTO>().HasKey(ai => ai.Id); // the call to HasKey is mandatory
modelManager.AddModel(nameof(Something), builder.GetEdmModel());
return modelManager;
}
public void Configure(...)
{
...
var modelBuilder = new ODataConventionModelBuilder();
modelBuilder.EntitySet<TestDTO>("TestDTOs");
app.UseMvc(builder =>
{
builder.MapODataRoute("api", modelBuilder.GetEdmModel());
});
...
}
調節器
[HttpGet("all")]
public async Task<IQueryable<TestDTO>> Get()
{
// plug your entities source (database or whatever)
var test = await TestService.GetTest();
var modelManager = (IODataModelManger)HttpContext.RequestServices.GetService(typeof(IODataModelManger));
var model = modelManager.GetModel(nameof(Something));
var queryContext = new ODataQueryContext(model, typeof(TestDTO), null);
var queryOptions = new ODataQueryOptions(queryContext, HttpContext.Request, Provider);
return queryOptions
.ApplyTo(test, new ODataQuerySettings
{
HandleNullPropagation = HandleNullPropagationOption.True
}, null)
.Cast<TestDTO>();
}
模型
public class TestDTO : BaseEntityDTO
{
[Required]
public Guid Id { get; set; }
public List<CustomerDTO> Customers { get; set; }
public List<string> Tags { get; set; }
[JsonExtensionData]
public IDictionary<string, object> AddProperties { get; set; }
}
問題是使用services.AddOData();
我只獲得帶有屬性Id的返回結果,沒有services.AddOData();
我得到json格式化的所有屬性。
如何序列化List屬性,也可能是字典?
謝謝。
這樣做了
var result = queryOptions
.ApplyTo(test, new ODataQuerySettings
{
HandleNullPropagation =
HandleNullPropagationOption.True
}, null)
.Cast<TestDTO>();
return Json(result);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.