Gus*_*Gus 3 c# serialization json.net
从Jobject(Newtonsoft)继承来自未序列化的类的existents属性.
为什么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}
}
}
Run Code Online (Sandbox Code Playgroud)
任何的想法?
无论你想做什么原因 - 原因很简单: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; }
}
}
Run Code Online (Sandbox Code Playgroud)
如果您只想在对象上同时拥有动态和静态属性 - 则无需从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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
801 次 |
| 最近记录: |