Данные не отображаются только в скобках в веб-API C# - PullRequest
1 голос
/ 06 января 2020

Я довольно новичок в Web API в C#.

Это мой 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>"
                            }
                        }
                    }
                }
            ]
        }
    ]
}

, но после того, как я использовал почтальон, это дисплей:

API output

и это мое определение 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; }
}

Ответы [ 2 ]

1 голос
/ 06 января 2020

Используйте [DataContract] и [DataMember(EmitDefaultValue = false)] для своих DTO.

У вас есть переопределенный сериализатор по умолчанию ASP. NET JSON, если вы используете ASP. NET Web API, тогда вы должны знать, что сериализатор JSON по умолчанию - это не DataContractJsonSerializer (D CJS), а JSON. NET. Поэтому, если вы явно не сконфигурируете JsonMediaTypeFormatter для использования D CJS, вам потребуется еще один атрибут для получения того же поведения (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; }
}

Чтобы узнать больше, следуйте этому Ссылка

0 голосов
/ 07 января 2020
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;
        }
...