我找不到用JSON.NET序列化派生列表列表的方法,我开始怀疑它是否可能。让我用一些代码解释一下情况。
我创建了一个新类,该类派生自特定对象的列表(首先尝试使用泛型对象)并添加了字符串属性NomGroupe
:
public class GroupeActes : List<Acte>
{
public string NomGroupe { get; set; }
public GroupeActes(string nom, List<Acte> liste)
{
NomGroupe = nom;
foreach (var acte in liste)
{
this.Add(acte);
}
}
}
然后,在我的代码中,我已经声明了这个类的列表(List<GroupeActes> listOfGroupeActes
),并用数据填充它。对于序列化,我使用以下代码:
JsonSerializer serializer = new JsonSerializer();
serializer.TypeNameHandling = TypeNameHandling.All;
using (StreamWriter sw = new StreamWriter(@"listOfGroupeActes.json"))
using (JsonWriter writer = new JsonTextWriter(sw))
{
serializer.Serialize(writer, listOfGroupeActes);
}
我尝试使用和不使用TypeNameHandling.All
参数以及Json.net属性的几种组合,甚至使用DataContract / DataMember。
到目前为止,我只是设法在我的json文件中获取每个嵌套List<Acte>
的数据而没有NomGroupe
属性,或者相反。但不是两者,这是我想要的。
然后有两个问题:
感谢您的帮助!
答案 0 :(得分:1)
You don't want to inherit from List<T>
改为创建列表属性:
public class GroupeActes
{
public List<Acte> Actes { get; set; }
public string NomGroupe { get; set; }
public GroupeActes(string nom, List<Acte> liste)
{
NomGroupe = nom;
Actes.AddRange(acte);
}
}
列表(和其他集合类型)在序列化时获得特殊处理。您不希望输出中的集合类型的公共属性(例如Capacity
和Count
),因此您通过继承添加的属性也不会被序列化。
集合是这样序列化的:
if o is IEnumerable
foreach object s in o
serialize o
因此序列化程序甚至不会查看您的可枚举属性。
答案 1 :(得分:0)
尝试使用Newtonsoft Json.NET
string itemToSend = JsonConvert.SerializeObject(dataModel);