我找不到用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
属性,或者反过来。但不能两者都有,这是我想要的。
那么有两个问题:
- 这可能吗?
- 如果是,我该怎么做?
谢谢你的帮助!
你不想从List<T>
继承。
创建一个list属性:
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
所以序列化器甚至不会查看你的enumerable的属性
尝试使用Newtonsoft Json。净
string itemToSend = JsonConvert.SerializeObject(dataModel);