Я пытаюсь де-сериализовать List<string>
, что на самом деле является List<myClass>
, объекты которого были сериализованы. Пример:Де-сериализовать JSON-список сериализованных объектов JSON
static void Main(string[] args)
{
List<MyThirdClass> myThirdClass = new List<MyThirdClass>(new[] { new MyThirdClass { RoleId = 123, RoleName = "123" }, new MyThirdClass { RoleId = 234, RoleName = "234" } });
List<MySecondSerializedClass> mySecondSerializedClass = new List<MySecondSerializedClass>();
foreach (MyThirdClass thirdClass in myThirdClass)
{
MySecondSerializedClass secondClass = new MySecondSerializedClass { Roles = new List<string>() };
foreach (MyThirdClass tClass in myThirdClass)
{
secondClass.Roles.Add(JsonConvert.SerializeObject(tClass));
}
mySecondSerializedClass.Add(secondClass);
}
MyFirstSerializedClass firstClass = new MyFirstSerializedClass
{
Id = 1,
Name = "1",
Roles = mySecondSerializedClass
};
string serializedFirstClass = JsonConvert.SerializeObject(firstClass, Formatting.Indented);
MyFirstNonSerializedClass nonSerializedFirstClass = JsonConvert.DeserializeObject<MyFirstNonSerializedClass>(serializedFirstClass);
}
public class MyFirstSerializedClass
{
public int Id { get; set; }
public string Name { get; set; }
public List<MySecondSerializedClass> Roles { get; set; }
}
public class MyFirstNonSerializedClass
{
public int Id { get; set; }
public string Name { get; set; }
public List<MySecondNonSerializedClass> Roles { get; set; }
}
public class MySecondSerializedClass
{
public List<string> Roles { get; set; }
}
public class MySecondNonSerializedClass
{
public List<MyThirdClass> Roles { get; set; }
}
public class MyThirdClass
{
public int RoleId { get; set; }
public string RoleName { get; set; }
}
serializedFirstClass
возвращает JSON как это:
{
"Id": 1,
"Name": "1",
"Roles": [
{
"Roles": [
"{\"RoleId\":123,\"RoleName\":\"123\"}",
"{\"RoleId\":234,\"RoleName\":\"234\"}"
]
},
{
"Roles": [
"{\"RoleId\":123,\"RoleName\":\"123\"}",
"{\"RoleId\":234,\"RoleName\":\"234\"}"
]
}
]
}
И пытается десериализации она генерирует исключение с сообщением:
Ошибка преобразования значения "{" Идентификатор роли ": 123," RoleName ":" 123 "}", чтобы ввести 'ConsoleApplication1.Program + MyThirdClass'. Путь 'Роли [0] .Roles [0]', строка 7, позиция 47.
Есть ли что-то я делаю неправильно или каким-либо образом рекурсивно-сериализации MyFirstSerializedClass в MyFirstNonSerializedClass?
Почему внешние роли не экранированы, а внутренние? – abatishchev
@abatishchev Я бы предположил, что это потому, что я сериализую роли как строку, а затем повторно сериализую их. –
Объявляет роли в MySecondNonSerializedClass as List –
abatishchev