从 Jobject(Newtonsoft) 继承未序列化类的现有属性。
为什么 Id 和 Name 属性没有序列化?
public class Test : JObject
{
public int Id { get; set; }
public string Name { get; set; }
}
class Program
{
static void Main(string[] args)
{
var test = new Test();
test["new_pro"] = 123456;
test.Id = 1;
test.Name = "Dog";
var r = Newtonsoft.Json.JsonConvert.SerializeObject(test);
// Result = { "new_pro":123456}
}
}
有什么想法吗?
最佳答案
无论您想这样做的原因是什么 - 原因很简单:JObject
实现了 IDictionary
并且 Json.NET 以特殊方式处理这种情况。如果您的类实现了 IDictionary
- Json.NET 将不会查看您的类的属性,而是会在字典中查找键和值。因此,要解决您的问题,您可以这样做:
public class Test : JObject
{
public int Id
{
get { return (int) this["id"]; }
set { this["id"] = value; }
}
public string Name
{
get { return (string) this["name"]; }
set { this["name"] = value; }
}
}
如果您只想在您的对象上同时拥有动态和静态属性 - 则无需从 JObject 继承。相反,使用 JsonExtensionData
属性:
public class Test {
public int Id { get; set; }
public string Name { get; set; }
[JsonExtensionData]
public Dictionary<string, JToken> AdditionalProperties { get; set; } = new Dictionary<string, JToken>();
}
var test = new Test();
test.AdditionalProperties["new_pro"] = 123456;
test.Id = 1;
test.Name = "Dog";
var r = Newtonsoft.Json.JsonConvert.SerializeObject(test);
关于c# - 从 Jobject Newtonsoft 继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42203358/