No data displayed only brackets in web API C#

旧城冷巷雨未停 提交于 2020-01-16 05:47:10

问题


I'm quite new to Web API in C#.

This is my JSON response:

{
    "<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>"
                            }
                        }
                    }
                }
            ]
        }
    ]
}

but after I used postman this is the display:

and this is my DefinitionDTO

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; }
}

回答1:


Use [DataContract] and [DataMember(EmitDefaultValue = false)] to your DTO's.

You have overriden default ASP.NET JSON serializer, If you're using the ASP.NET Web API, then you should be aware that the default JSON serializer isn't the DataContractJsonSerializer (DCJS), but JSON.NET instead. So unless you explicitly configure your JsonMediaTypeFormatter to use DCJS, you need another attribute to get the same behavior (JsonProperty, and its DefaultValueHandling property).

[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; }
}

For More to know please follow this Link




回答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;
        }


来源:https://stackoverflow.com/questions/59606976/no-data-displayed-only-brackets-in-web-api-c-sharp

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!