Как поместить класс внутри объекта при сериализации в JSON - PullRequest
2 голосов
/ 21 июня 2020

У меня есть два класса:

public class ipAddress
{
    public object ip { get; set; }
}

public class Rule
{
    public string name { get; set; }
    public ipAddress conditions { get; set; }
    public string action { get; set; }
    public Boolean enabled { get; set; }
    public string statusCode { get; set; }
}

Мой код для создания / присвоения значений этому:

        Rule new_rule = new Rule();
        ipAddress ip_info = new ipAddress();
        ip_info.ip = new { ipAddress = "34.5.6.7.8" };
        new_rule.name = "test";
        new_rule.conditions = ip_info;
        new_rule.action = "ALLOW";
        new_rule.enabled = true;
        new_rule.statusCode = "FORBIDDEN_403";
        var rule_json = JsonConvert.SerializeObject(new_rule);

после сериализации я получаю этот результат

{"name":"test","conditions":{"ip":{"ipAddress":"34.5.6.7.8"}},"action":"ALLOW","enabled":true,"statusCode":"FORBIDDEN_403"}

В то время как мой ожидаемый результат:

{"name":"test","conditions":[{"ip":{"ipAddress":"34.5.6.7.8"}}],"action":"ALLOW","enabled":true,"statusCode":"FORBIDDEN_403"}

, поэтому единственная разница - это дополнительный объект, обернутый вокруг значений условий. Как я могу сделать это sh? Пробовал разные вещи, но не добился цели. Спасибо

Ответы [ 3 ]

3 голосов
/ 21 июня 2020
public ipAddress conditions { get; set; }

Приведенный выше оператор означает, что conditions является объектом, а объекты представлены { }. Если вы ожидаете, что это будет список / массив объектов (представленный [ ]), тогда вам нужно будет определить свои условия как элемент массива / списка

public List<ipAddress> conditions { get; set; }

Ваш объект назначения для условий должен выглядит так,

new_rule.conditions = new List<ipAddress>() { ip_info };

Это даст желаемый результат. Кроме того, согласно соглашениям об именах, имя вашего класса и имена переменных должны начинаться с букв верхнего регистра.

0 голосов
/ 21 июня 2020

Чтобы вы могли получить ожидаемый результат, ваш ipAddress должен быть массивом.

public class Rule
{
    public string name { get; set; }
    public ipAddress[] conditions { get; set; }
    public string action { get; set; }
    public Boolean enabled { get; set; }
    public string statusCode { get; set; }
}

Rule new_rule = new Rule();
ipAddress ip_info = new ipAddress();
ip_info.ip = new { ipAddress = "34.5.6.7.8" };
new_rule.name = "test";
new_rule.conditions = new ipAddress[] { ip_info };
new_rule.action = "ALLOW";
new_rule.enabled = true;
new_rule.statusCode = "FORBIDDEN_403";
var rule_json = JsonConvert.SerializeObject(new_rule);

Результат, который u получит от этого, будет

{"name":"test","conditions":[{"ip":{"ipAddress":"34.5.6.7.8"}}],"action":"ALLOW","enabled":true,"statusCode":"FORBIDDEN_403"}
0 голосов
/ 21 июня 2020

Вы хотите, чтобы условия были массивом Итак, вам нужно объявить publi c IP-адреса [] условия

Вы также назначили ему объект, и это результат, который вы получите. Если вы хотите, чтобы json для вывода массива вы должны объявить его как массив

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...