c# - 在 Unity 中使用 Json.NET 序列化和反序列化具有任意字段的对象
问题描述
我想序列化和反序列化具有任意字段的对象。我试图让具有任意字段的对象扩展Dictionary<string, object>
,希望能够将任意字段设置为字典条目。在这种情况下,除了 and 字段之外,我希望在 json 响应(在代码注释中列出)Company
中包含and 。不幸的是,我能够获得任意字段,但无法获得非任意字段。Position
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"
}
}
解决方案
我认为你的工作类的问题,它来自字典,所以当你序列化它时不会考虑它的成员。只有字典值,
试试这种方式,我不确定这会帮助你的上下文
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["office"]);
推荐阅读
- reactjs - 子组件不渲染道具
- javascript - Heroku 使用 Node.js 构建错误
- elasticsearch - Kibana GUI - 添加全局“环境”过滤器
- json - Airflow DAG 序列化:TypeError:“V1Pod”类型的对象不是 JSON 可序列化的
- r - 在单个术语中使用组和行
- windows - COM 端口延迟的用处
- node.js - npm install -D sass-loader node-sass Vue.js 2021
- php - Laravel 任务调度不提供失败输出
- css - 角度组件 CSS
- url - 在 GMail URL 中指定登录