【发布时间】:2016-02-12 15:09:46
【问题描述】:
我的实体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();
}
【问题讨论】:
标签: c# json serialization asp.net-web-api odata