簡體   English   中英

Odata Asp.NET WebApi在實體/ DTO中返回json屬性

[英]Odata Asp.NET WebApi return json property in entity/DTO

我的實體QueryFilter具有一個屬性,其中包含序列化的json。 QueryFilterDetailDTOController我想反序列化JSON,用一些數據豐富它,並用新的JSON數據返回DTO。

我希望能夠直接使用豐富的JSON對象作為javascript中返回對象的屬性(而不是字符串)。 我該如何實現?

我試圖將表達式的類型設置為JObject ,但是模型構建器將引發異常(由於遞歸類型)。 這是正確的方法,還是有更好的方法?

DTO

public class QueryFilterDetailDTO
{
    public int ID { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public string Context { get; set; }
    public JObject Expression { get; set; }

    public QueryFilterDetailDTO(QueryFilter queryFilter)
    {
        ID = queryFilter.ID;
        Name = queryFilter.Name;
        Description = queryFilter.Description;
        Context = queryFilter.Context;
    }
}

調節器

public class QueryFilterDetailDTOController : ODataController
{
    private readonly IQueryFilterService _service;

    public QueryFilterDetailDTOController(IQueryFilterService service)
    {
        _service = service;
    }

    [HttpGet]
    [EnableQuery(MaxNodeCount = 1000)]
    public HttpResponseMessage Get([FromODataUri] int key)
    {
        var queryFilter = _service.Find(key);

        var dto = new QueryFilterDetailDTO(queryFilter);
        dto.Expression = JObject.Parse(queryFilter.SerializedFilter);
        dto.Expression["Test"] = 1;

        return Request.CreateResponse(HttpStatusCode.OK, dto);    
    }
}

建立模型

private static IEdmModel GetModel()
{
    ODataModelBuilder builder = new ODataConventionModelBuilder();
    builder.EntitySet<QueryFilterDetailDTO>("QueryFilterDetailDTO").EntityType.HasKey(dto => dto.ID);
    builder.GetEdmModel();
}

JsonExtensionData ,您應該可以使用JsonExtensionData

public class QueryFilterDetailDTO
{
    public int ID { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public string Context { get; set; }

    [JsonExtensionData]
    public Dictionary<string, object> Expression { get; set; }
}

擴展數據包含無法映射到c#屬性的任何JSON屬性的鍵和值。

有關更多詳細信息,請參見此處此處

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM