c# - 序列化派生列表的列表

标签 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属性(property),或相反。但不是两者兼而有之,这正是我想要的。

那么两个问题:

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

感谢您的帮助!

最佳答案

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

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

集合是这样序列化的:

if o is IEnumerable
    foreach object s in o
        serialize o

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

关于c# - 序列化派生列表的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39407575/

相关文章:

javascript - 如何获取 JSON URL 文件并使其不断更新

json - 为两个几乎相同的实例定义一个 JSON 模式

c# - JSON反序列化——String自动转为Int

c# - 正则表达式以避免 HTML 标签和空值

java - Android 从 Json 对象解析字符串值

c# - 找不到使用 Json.Net 反序列化 Json 索引数组的方法

json - 将 JSON 反序列化为扁平化类

使用引用类型和可空值类型的 C# 泛型类

c# - 从 Azure 表存储中删除批处理时如何避免 404

c# - 部署到 Azure 网站时 WebApi 不工作