【问题标题】:No data displayed only brackets in web API C#Web API C#中没有数据只显示括号
【发布时间】:2020-01-07 13:24:29
【问题描述】:

我对 C# 中的 Web API 很陌生。

这是我的 JSON 响应:

{
    "<chart_type>": [
        { "name": "entity" },
        { "display_name": "entity display name" },
        {
            "kpi": [
                {
                    "name":"<kpi>",
                    "display_name":"test",
                    "required": [
                        { "test": "test" },
                        { "test1": "test" }
                        ],
                    "optional": [        
                        { "test": "test" },
                        { "test": "test" }
                        ],
                    "objects": {
                        "<Fieldname>": 
                        {
                            "display_name":"<entity display name>",
                            "type": "<select or text>",
                            "default": "default value (already selected)",
                            "list": {
                                "<id>": "<value>"
                            }
                        }
                    }
                }
            ]
        }
    ]
}

但在我使用邮递员之后,这是显示:

这是我的定义DTO

public partial class Test
{
    [JsonProperty("<chart_type>", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
    public ChartType[] chart_type { get; set; }
}

public partial class ChartType
{
    [JsonProperty("name", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
    public string entity_name { get; set; }

    [JsonProperty("display_name", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
    public string entity_display_name { get; set; }

    [JsonProperty("kpi", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
    public Kpi[] Kpi { get; set; }
}

public partial class Kpi
{
    [JsonProperty("name", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
    public string kpi_name { get; set; }

    [JsonProperty("display_name", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
    public string kpi_display_name { get; set; }

    [JsonProperty("required", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
    public RequiredElement[] kpi_required { get; set; }

    //[JsonProperty("optional", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
    //public Optional[] kpi_optional { get; set; }

    [JsonProperty("objects", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
    public Objects Objects { get; set; }
}

public partial class RequiredElement
{
    [JsonProperty("test", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
    public string Test { get; set; }

    [JsonProperty("test1", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
    public string Test1 { get; set; }
}

public partial class Objects
{
    [JsonProperty("<Fieldname>", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
    public Fieldname Fieldname { get; set; }
}

public partial class Fieldname
{
    [JsonProperty("display_name", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
    public string DisplayName { get; set; }

    [JsonProperty("type", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
    public string Type { get; set; }

    [JsonProperty("default", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
    public string Default { get; set; }

    //[JsonProperty("list", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
    //public List List { get; set; }
}

【问题讨论】:

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


    【解决方案1】:

    [DataContract][DataMember(EmitDefaultValue = false)] 用于您的DTO。

    您已经覆盖了默认的 ASP.NET JSON 序列化程序,如果您使用的是 ASP.NET Web API,那么您应该知道默认的 JSON 序列化程序不是 DataContractJsonSerializer (DCJS),而是 JSON.NET反而。因此,除非您将 JsonMediaTypeFormatter 显式配置为使用 DCJS,否则您需要另一个属性来获得相同的行为(JsonProperty 及其 DefaultValueHandling 属性)。

    [DataContract]
    public partial class Fieldname
    {
    [DataMember(EmitDefaultValue = false)]
    [JsonProperty("display_name", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
    public string DisplayName { get; set; }
    
    [JsonProperty("type", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
    public string Type { get; set; }
    
    [JsonProperty("default", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
    public string Default { get; set; }
    
    //[JsonProperty("list", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
    //public List List { get; set; }
    }
    

    想了解更多请关注Link

    【讨论】:

    • 您好,先生,我尝试将其更改为 public class ChartType { public string kpi_name { get;放; } 公共字符串 kpi_display_name { 获取;放; } 公共列表 kpi { 获取;放; } } 公共类 RootObject { public List chart_type { get;放; } } 当我调用 RootObject 时,它不显示数据第一个数据,但是当我尝试调用公共类 ChartType 时,它​​将显示前两个值,第三个为空。我不能打电话给第三个,这是我的问题之一。
    • [HttpGet] public HttpResponseMessage definition() { var result = _definitionRepository.definition(); if (result == null) { return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Bad request"); } return Request.CreateResponse(HttpStatusCode.OK, result); }
    • 如果可能,还需要存储库代码.. 并将DataMember 添加到所有属性中。
    • 公共类 DefinitionRepository : IDefinitionRepository { private HistogramEntities _db = new HistogramEntities(); public List definition() { var results = _db.Database.SqlQuery("get_definition_list").ToList();返回结果; } }
    【解决方案2】:
    public List<Root> definition()
            {
                var all = _db
                    .kpi_definition
                    .Include("KPI")
                    .Select(dl => new Root
                    {
                        //chart_type = dl.chart_type,
                        chart_type = new List<Chart>
                        {
                           new Chart { entity_name = dl.entity_name ,
                                       entity_display_name = dl.entity_display_name,
                                       kpi = new List<KPI>
                                       {
                                          new KPI {
                                                   kpi_name = dl.kpi_name,
                                                   kpi_display_name = dl.kpi_display_name,
                                                   required = new List<Required>
                                                   {
                                                       new Required
                                                       {
                                                           //kpi_required = dl.kpi_required
                                                       }
                                                   },
                                                   optional = new List<Optional>
                                                   {
                                                       new Optional
                                                       {
                                                           //kpi_optional = dl.kpi_optional
                                                       }
                                                   },
                                                   objects = new List<Objects>
                                                   {
                                                       new Objects
                                                       {
                                                           field_name = new List<FieldName>
                                                           {
                                                               new FieldName
                                                               {
                                                                entity_display_name = dl.entity_display_name,
                                                                type = "Select or Text",
                                                                @default = "default value(already selected)",
                                                                list = "",
                                                                ID = dl.ID
                                                               }
                                                           }
    
                                                       }
                                                   }
                                                  }
                                       }
                                     }
                        }
                    }).ToList();
                return all;
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-30
      • 1970-01-01
      • 1970-01-01
      • 2017-05-20
      相关资源
      最近更新 更多