c# - 如何从数据库创建嵌套 json?

标签 c# json

我创建了一个 Web API,它以 json 格式显示数据库中表中的数据。我想创建一个嵌套 api。

我该怎么做?

调用api时我的json:

{
   "ID":1,
   "plVersion":1,
   "mID":10,
   "sID":1025,
   "orID":null,
   "x":22.9935,
   "y":40.5885
}

我想要这样的东西

[
   {
      "ID":1,
      "header":{
         "plVersion":1,
         "mID":10,
         "sID":1025
      },
      "mContainer":{
         "aID":{
            "orID":null
         },
         "Position":{
            "x":22.9935,
            "y":40.5885
         }
      }
   }
]

我的testController.cs

public class testController : ApiController
{
    [Route("api/test")]
    public IEnumerable<test> Get()
    {
        using (Raw_DataEntities entities = new Raw_DataEntities())
        {
            return entities.tests.ToList();
        }
    }

    [Route("api/test/{id}")]
    public test Get(int id)
    {
        using (Raw_DataEntities entities = new Raw_DataEntities())
        {
            return entities.tests.FirstOrDefault(e => e.ID == id);
        }
    }
}

最佳答案

您可以构建一个映射到您想要的 json 结构的包装器类,填充它并返回包装器而不是 Controller 中的实体。你的包装看起来像这样:

public class Header
{
    public int plVersion { get; set; }
    public int mID { get; set; }
    public int sID { get; set; }
}

public class AID
{
    public object orID { get; set; }
}

public class Position
{
    public double x { get; set; }
    public double y { get; set; }
}

public class MContainer
{
    public AID aID { get; set; }
    public Position Position { get; set; }
}

public class RootObject
{
    public int ID { get; set; }
    public Header header { get; set; }
    public MContainer mContainer { get; set; }
}

为了能够轻松创建与给定 json 匹配的类结构,您可以使用类似 json2csharp 的工具。 .

映射数据并返回:

[Route("api/test/{id}")]
public test Get(int id)
{
    using (Raw_DataEntities entities = new Raw_DataEntities())
    {
        var entity = entities.tests.FirstOrDefault(e => e.ID == id);
    }

    var root = new RootObject();
    // Filling the object
    root.ID = entity.Id;
    // etc. ...

    return root;
}

为了拥有更清晰的操作方法,我建议编写一个扩展方法来将实体映射到其包装对象:

public static class EntityExtensions
{
    public static RootObject ToJsonWrapper(this Entity entity)
    {
        if (entity == null)
            return null;

        var root = new RootObject();
        root.ID = entity.Id;
        // etc ...
    }
}

然后在操作中调用它,如下所示:

[Route("api/test/{id}")]
public test Get(int id)
{
    using (Raw_DataEntities entities = new Raw_DataEntities())
    {
        return entities.tests.FirstOrDefault(e => e.ID == id).ToJsonWrapper();
    }
}

关于c# - 如何从数据库创建嵌套 json?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55685221/

相关文章:

android - u\2022 不显示在从 json 检索的 TextView 中

c# - 索引超出范围c#datagridview

c# - 将属性用于通用约束

c# - 如何在使用 c# 在 aspx 上加载整页后延迟调用函数

c# - 使用第二个线程访问领域模型

json - ObjectMapper 解析通用对象

javascript - 如何在 JavaScript 中检查文件中是否存在 JSON 对象

java - ResultSet 到 JSON 的最有效转换?

python - 将 Google Vision API 响应转换为 JSON

c# - Silverlight,旋转文本框时并非所有文本都显示