序列化派生列表的列表



我找不到用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);           
    }
}

列表(和其他集合类型)在序列化时得到特殊处理。您不希望在您的输出中出现集合类型的公共属性(例如CapacityCount),因此您通过继承添加的属性也不会被序列化。

集合是这样序列化的:

if o is IEnumerable
    foreach object s in o
        serialize o

所以序列化器甚至不会查看你的enumerable的属性

尝试使用Newtonsoft Json。净

string itemToSend = JsonConvert.SerializeObject(dataModel);

最新更新