【问题标题】:Custom Json response from web api来自 Web api 的自定义 Json 响应
【发布时间】:2018-07-13 11:01:04
【问题描述】:

我正在开发 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 拆分并显示为单个实体。如果有任何解决方案可以实现这一点,请帮助我。

【问题讨论】:

  • 您的预期响应不是无效的吗? MRRecordList 有多个同名的属性。
  • 除了@YuriyFaktorovich评论你的对象模型无效,即使Json无效,Json也没有根对象的标签/名称
  • "实现这个的任何解决方案" 实现什么?我不知道你在问什么。
  • 您应该与服务人员交谈,以便他们接受有效的 Json,否则将 [] 替换为 {} 并且 Bob 是您的叔叔。

标签: c# json asp.net-web-api


【解决方案1】:

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

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 中没有根标签

【讨论】:

  • 我的错,我没有在问题中提到“List”对象。正如您所展示的,我能够实现响应。我想要这样的响应, MRecord : { FirstName : "1stName", LastName : "", }, MRecord : { FirstName : "2Name", LastName : "", } 是否可能有带有属性名称的 json 数据?跨度>
  • 这不是一个合法的Json,你最多可以设为Dictionary&lt;string,Record&gt;,这将用字符串名称标识符标记元素,但即使这样每个标识符也需要不同,它不能是“MRecord ", 应该是 "MRecord0", "MRecord1", 以此类推
  • 无论您考虑什么,首先验证 json 是否有效,然后以正确的格式格式化,使用 Json Lint 验证器
  • 谢谢 Mrinal。是的,我明白,它不是有效的 json 格式,因为属性不能重复。我会坚持我现有的 json。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2018-04-28
  • 2016-08-06
  • 1970-01-01
  • 2019-02-09
  • 2019-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多