首页 > 解决方案 > 来自 web api 的自定义 Json 响应

问题描述

我正在开发 ASP .Net web api 项目,我们正在提供自定义对象的响应。当 api 在 fiddler 中公开时,JsonFormatter 将数据格式化为 json 对象。这是我们应用程序的框架。

数据对象

public class CustomData
{
  public Records MRecord {get;set;}
  public string ResponseCode {get;set;}
  public string Status {get;set;}
}

public class Records
{
  Public class FirstName {get;set;}
  Public class LastName {get;set;}
}

回复

CustomData : {
  MRecord : [
   {
     FirstName : "1stName",
     LastName : "",
   },
   {
     FirstName : "2Name",
     LastName : "",
   },
 ],
 ResponseCode : "0",
 Status: "Success"
}

预期的格式就像

CustomData : {
    MRRecordList : {
      MRecord : 
       {
         FirstName : "1stName",
         LastName : "",
       },
      MRecord :
       {
         FirstName : "2Name",
         LastName : "",
       }
     },
     ResponseCode : "0",
     Status: "Success"
    }

考虑到数组对象没有被 JsonFormatter 拆分并显示为单个实体。如果有任何解决方案可以实现这一点,请帮助我。

标签: c#jsonasp.net-web-api

解决方案


以下是您需要的代码/模型:

void Main()
{
    var c = new CustomData()
    {
        MRecordList = new List<UserQuery.Record>
        {
          new Record{FirstName="A",LastName="B"},
          new Record{FirstName="C",LastName="D"}
        },
        ResponseCode = "0",
        Status = ""     
    };

    JsonConvert.SerializeObject(c).Dump();
}


public class CustomData
{
    public List<Record> MRecordList { get; set; }
    public string ResponseCode { get; set; }
    public string Status { get; set; }
}

public class Record
{
    public string FirstName { get;set;}     
    public string LastName { get;set;}
}

这将产生以下 Json:

{
    "MRecordList": [{
        "FirstName": "A",
        "LastName": "B"
    }, {
        "FirstName": "C",
        "LastName": "D"
    }],
    "ResponseCode": "0",
    "Status": ""
}

如果您的要求是以下 Json:

{
    "customData": {
        "MRecordList": [{
            "FirstName": "A",
            "LastName": "B"
        }, {
            "FirstName": "C",
            "LastName": "D"
        }],
        "ResponseCode": "0",
        "Status": ""
    }
}

然后对代码进行以下更改:

public class Test
{
    public CustomData customData {get;set;}
}

Test t = new Test{customData = c};

Now serialize t

从上面的示例中可以清楚地记住 Json 中没有根标记


推荐阅读