如何在序列化期间避免使用属性名称?下面是一个例子
public class A {
public List<object> Values { get; set; }
public string Name { get; set; }
}
A a = new A();
a.Name = "Numbers"
a.Values = new List<object>();
a.Values.Add(1);
a.Values.Add(2);
a.Values.Add(3);
a.Values.Add(4);
JsonConvert.SerializeObject(new { a });
序列化后,结果包含属性名称“值”
{
"a": {
"values": [
1,
2,
3,
4
],
"name": "Numbers"
}
}
但是,我需要以下内容
{
"a": [
1,
2,
3,
4
],
"name": "Numbers"
}
只需序列化a.Values
;
JsonConvert.SerializeObject(a.Values);
你的代码中有一些错误。
首先,如果你想要这个课:
public class A
{
public List<object> Values { get; set; }
public string Name { get; set; }
}
要序列化到这个json:
{
"a": [
1,
2,
3,
4
],
"name": "Numbers"
}
你会度过一段美好的时光。只看结构,它们不是1-1。
你需要改变你的班级,确保你把它命名为有意义的东西(一个单一字母的类是一个非常糟糕的主意)。
public class SomeClass
{
[JsonProperty("a")]
public List<object> Values { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
}
你注意到上面的[JsonProperty()]
属性?这告诉序列化程序该属性应该使用定义的名称进行序列化。这样,你可以在代码中拥有一个有意义的属性名称(“Values”),并且仍然可以按照你想要的方式(“a”)序列化json。
第二个问题是序列化时,您正在创建一个新的匿名对象,该对象具有您创建的实例类的属性。这将再次弄乱你的结构。将序列化代码更改为仅序列化对象实例:
string json = JsonConvert.SerializeObject(someInstanceOfYourClass);
我上面的更改应该给你json,如下所示:
{
"a": [
1,
2,
3,
4
],
"name": "Numbers"
}
我做了一个小提琴here,将演示。