Я хотел бы сериализовать и десериализовать объекты с произвольными полями.Я пытался заставить объект с произвольными полями расширять Dictionary<string, object>
в надежде, что смогу установить произвольные поля в качестве словарных статей.В этом случае я ожидаю иметь Company
и Position
в ответе json (перечислены в комментариях к коду) в дополнение к полям manager
и office
.К сожалению, я могу получить произвольные поля, но не могу получить не произвольные поля.
Я также хотел бы иметь возможность добавлять произвольные объекты, а не только строки (т.е. добавлять объект зарплаты с базовой зарплатой, бонуси т. д. на работу).У меня также есть некоторые ограничения, и я не могу использовать dynamic
для этого.
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public Job Job { get; set; }
}
public class Job : Dictionary<string, object>
{
public string Company { get; set; }
public string Position { get; set; }
}
var job = new Job()
{
Company = "Super Mart",
Position = "Cashier"
};
// Set arbitrary fields
job["manager"] = "Kathy";
job["office"] = "001";
var john = new Person()
{
Name = "John Doe",
Age = 41,
Job = job
};
var employeeJson = JsonConvert.SerializeObject(john, Formatting.Indented);
Log.Debug("TestSerialization", "json: {0}", employeeJson);
// Result
// {
// "Name": "John Doe",
// "Age": 41,
// "Job": {
// "manager": "Kathy",
// "office": "001"
// }
// }
var johnDoe = JsonConvert.DeserializeObject<Person>(employeeJson);
Log.Debug("TestSerialization", "name: {0}, age: {1}", johnDoe.Name, johnDoe.Age);
// Result
// name: John Doe, age: 41
Log.Debug("TestSerialization", "company: {0}, position: {1}", johnDoe.Job.Company, johnDoe.Job.Position);
// Result
// company: , position:
Log.Debug("TestSerialization", "manager: {0}, office: {1}", johnDoe.Job["manager"], johnDoe.Job["office"]);
// Result
// manager: Kathy, office: 001
Мой результат json от десериализации с использованием этого кода:
{
"Name": "John Doe",
"Age": 41,
"Job": {
"manager": "Kathy",
"office": "001"
}
}
Я бы хотел, чтобы результат json был (что ожидает служба)
{
"Name": "John Doe",
"Age": 41,
"Job": {
"Company" = "Super Mart",
"Position" = "Cashier"
"manager": "Kathy",
"office": "001"
}
}