gpt4 book ai didi

c# - 具有继承自 Dictionary 的类的 JSON 序列化

转载 作者:行者123 更新时间:2023-11-30 12:18:53 31 4
gpt4 key购买 nike

我有一个当前继承自 Dictionary 的类,然后向其添加了一些一流的成员属性。大致:

public class Foo : Dictionary<string, string>
{
public string Bar { get; set; }
public string Baz { get; set; }
}

然而,在将该对象的一个​​实例序列化为 JSON 后,序列化程序似乎只发出我存储在字典中的键/值对。即使我将 DataMember 属性应用于新的第一类属性,JSON 序列化程序似乎也不知道如何处理这些属性,而是忽略它们。

我假设我遗漏了一些基本的基本知识,但在 .net 的 JSON 序列化程序上搜索代码示例和文档时,我只发现了一些与我正在做的事情不太相符的琐碎示例。我们从其他一些基类派生的所有其他类似乎都没有出现这个问题,正是这个派生自通用字典的类特别适合我们。

[编辑]除了将字典作为一级属性移入 Foo 之外,还有什么办法可以使这项工作正常进行吗?我假设挂断是序列化程序不知道如何“命名”字典以将其与其他成员区分开来?

最佳答案

在这种情况下,也许基于组合的解决方案会更好:

using System;
using System.Collections.Generic;
using System.Runtime.Serialization.Json;
using System.IO;
using System.Text;

class Program
{
static void Main()
{
Foo foo = new Foo { Bar = "bar", Baz = "baz" };
foo.Items.Add("first", "first");

DataContractJsonSerializer serializer
= new DataContractJsonSerializer(typeof(Foo));

using (MemoryStream ms = new MemoryStream())
{
serializer.WriteObject(ms, foo);
Console.WriteLine(Encoding.Default.GetString(ms.ToArray()));
}
}
}

public class Foo
{
public Dictionary<string, string> Items { get; set; }
public string Bar { get; set; }
public string Baz { get; set; }

public Foo()
{
this.Items = new Dictionary<string, string>();
}
}

产生这个输出:

{"Bar":"bar","Baz":"baz","Items":[{"Key":"first","Value":"first"}]}

作为解决方法,这会解决您的问题吗?

关于c# - 具有继承自 Dictionary<T,V> 的类的 JSON 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1179864/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com