Сериализация и десериализация объектов с произвольными полями с использованием Json.NET в Unity - PullRequest
0 голосов
/ 01 марта 2019

Я хотел бы сериализовать и десериализовать объекты с произвольными полями.Я пытался заставить объект с произвольными полями расширять 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"
  }
}

1 Ответ

0 голосов
/ 01 марта 2019

Я думаю, что проблема с вашим классом работы, он происходит от словаря, поэтому при сериализации он не будет рассматривать его членов.только значения словаря,

Попробуйте этот способ, я не уверен, что это поможет вашему контексту

public class Job 
{
    public string Company { get; set; }
    public string Position { get; set; }
    public Dictionary<string,object> job { get; set; }

    public Job()
    {
        job = new Dictionary<string, object>();
    }
}

Debug.Log (johnDoe.Job.job ["manager"] + "-"+ johnDoe.Job.job ["офис"]);

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