序列化派生列表列表

时间:2016-09-09 08:53:02

标签: c# json json.net

我找不到用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属性,或者相反。但不是两者,这是我想要的。

然后有两个问题:

  • 有可能吗?
  • 如果是,我该怎么办?

感谢您的帮助!

2 个答案:

答案 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);           
    }
}

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

集合是这样序列化的:

if o is IEnumerable
    foreach object s in o
        serialize o

因此序列化程序甚至不会查看您的可枚举属性。

答案 1 :(得分:0)

尝试使用Newtonsoft Json.NET

string itemToSend = JsonConvert.SerializeObject(dataModel);