hamid18 Ответов: 1

Разница между JSON при сериализации (list<T>) и сериализации (.NET string)


Я пытаюсь понять сериализацию json. Теперь у меня есть путаница относительно SerializeObject(object obj). Когда обычная строка dot net передается в SerializeObject(), результирующий json содержит "". Но когда список пользовательского типа передается в SerializeObject(List<t>), результирующая строка json не содержит "". Я не в состоянии понять разницу. Обычно в строке dot net "" не является частью строки в качестве значения.

Что я уже пробовал:

Программы.в CS
----------
string str= "[{ \"firstName\":\"Todd\",\"lastName\":\"Grover\",\"gender\":\"Male\",\"salary\":50000},{ \"firstName\":\"Sara\",\"lastName\":\"Baker\",\"gender\":\"Female\",\"salary\":40000}]"; 
    Console.WriteLine(str); 
    var js = JsonConvert.SerializeObject(str); 
    Console.WriteLine(js);

------------------------------------------------------------------------

    

Employee
--------

    public class Employee
        {
            public string firstName { get; set; }
            public string lastName { get; set; }
            public string gender { get; set; }
            public int salary { get; set; }
        }

Program.cs
----------
    var employee1 = new Employee
                {
                    firstName = "Todd",
                    lastName = "Grover",
                    gender = "Male",
                    salary = 50000
                };
    
                var employee2 = new Employee
                {
                    firstName = "Sara",
                    lastName = "Baker",
                    gender = "Female",
                    salary = 40000
                };
    
                var listEmployee = new List<employee>();
                listEmployee.Add(employee1);
                listEmployee.Add(employee2);
                var js = JsonConvert.SerializeObject(listEmployee);
                Console.WriteLine(js);

1 Ответов

Рейтинг:
6

BillWoodruff

0 вы не неправильный: Json для списка будет содержать кавычки ! однако он не будет содержать escape-символ обратной косой черты, который вы видите в строке..

1 Предположим, что вы можете использовать JSON для десериализации как строки, так и списка сотрудников ... безошибочно ... в чем же проблема ?

2 чтобы понять, как Json экранирует строки: [^]

3 я предлагаю вам привыкнуть использовать Json.Метод десериализации с ограничением универсального типа:

List<JsonTest.Employee> jslist = JsonConvert.DeserializeObject<List<JsonTest.Employee>>(jt.js2);

Это избавит вас от необходимости преобразовывать результат объекта в любой тип и, ИМХО, сделает намерение вашего кода более ясным.

имхо, очень жаль, что в Json нет параллельного универсального оператора сериализации.

4 я предлагаю вам изучить сериализацию с использованием средств DataContract C#: imho намного лучше, чем материал Newtonsoft: [^], [^].