C# 如何在C中将自定义对象序列化为Json#

C# 如何在C中将自定义对象序列化为Json#,c#,json,C#,Json,我有一个像下面这样的班级 public class CustomObject { public string param1; public IEnumerable<ExampleClass1> param2; public Dictionary<ExampleClass1, IEnumerable<ExampleClass2>> param3; //Constructor of the class with values set. } public cla

我有一个像下面这样的班级

public class CustomObject
{
public string param1;
public IEnumerable<ExampleClass1> param2;
public Dictionary<ExampleClass1, IEnumerable<ExampleClass2>> param3;

//Constructor of the class with values set.
}

public class ExampleClass1
{
    public string example1String;
    public int example1Int;

//Constructor of the class with values set.
}

public class ExampleClass2
{
    public string example2String;
    public int example2Int;

//Constructor of the class with values set.
}
我想序列化这个类,并使用下面的方法将对象序列化为json字符串

var serializedContent = JsonConvert.SerializeObject(CustomObject);
param1和param2的输出是正确的,但param3没有正确序列化,它只显示一条记录


我怎样才能解决这个问题?我看到了可以序列化字典的示例,但如果它是类的成员,如何实现类的完全序列化?

请在
CustomObject
中特别了解这一点:

public Dictionary<ExampleClass1, IEnumerable<ExampleClass2>> param3;
请记住,将
exampleClas1
作为一个键,必须确保没有其他
exampleClas1
具有相同的值,否则JSON中会有重复的键,这使分析变得困难

警告:我不知道如何将其反序列化回实际对象,因为它无法将字符串转换为
exampleClas1
。您可能需要做一些愚蠢的事情,对数据做一个复合键,然后制作一个自定义JSON转换器来反序列化它

我给您的建议是,当您要序列化到JSON或从JSON序列化时,不要使用类作为映射键

ETA:我用于测试的数据:

var cobj = new CustomObject
{
    param1 = "abc",
    param2 = new ExampleClass1[]
    {
        new ExampleClass1 { example1String = "abc1", example1Int = 1 },
        new ExampleClass1 { example1String = "abc2", example1Int = 2 }
    },
    param3 = new Dictionary<ExampleClass1, IEnumerable<ExampleClass2>>
    {
        { new ExampleClass1{ example1String = "abc1", example1Int = 1 }, new ExampleClass2[] { new ExampleClass2 { example2String = "xyz1", example2Int = 2 }, new ExampleClass2 { example2String = "xyz2", example2Int = 3 } } },
        { new ExampleClass1{ example1String = "abc2", example1Int = 4 }, new ExampleClass2[] { new ExampleClass2 { example2String = "xyz3", example2Int = 5 }, new ExampleClass2 { example2String = "xyz4", example2Int = 6 } } }
    }
};
var cobj=新的CustomObject
{
param1=“abc”,
param2=新示例Class1[]
{
新示例class1{example1String=“abc1”,example1Int=1},
新示例class1{example1String=“abc2”,example1Int=2}
},
param3=新字典
{
{new ExampleClass 1{example1String=“abc1”,example1Int=1},new ExampleClass 2[]{new ExampleClass 2{example2String=“xyz1”,example2Int=2},new ExampleClass 2{example2String=“xyz2”,example2Int=3},
{new ExampleClass1{example1String=“abc2”,example1Int=4},new ExampleClass2[]{new ExampleClass2{example2String=“xyz3”,example2Int=5},new ExampleClass2{example2String=“xyz4”,example2Int=6}}
}
};

问题出在哪里还不是很清楚。您能提供输入、输出和期望的输出吗?首先,您必须确定将
Object1
实例表示为有意义的JSON键的策略。JSON键可以是字符串或数字。这取决于用于数据反序列化的框架。有不同的框架(
newtonsoft.json
System.Text.json
;等等)。“你应该选一个你最喜欢的。”古鲁斯顿添加了输入和输出。
var serializedContent = JsonConvert.SerializeObject(CustomObject);
public Dictionary<ExampleClass1, IEnumerable<ExampleClass2>> param3;
public class ExampleClass1
{
    public string example1String;
    public int example1Int;

    public override string ToString()
    {
        return example1String;
    }
}
var cobj = new CustomObject
{
    param1 = "abc",
    param2 = new ExampleClass1[]
    {
        new ExampleClass1 { example1String = "abc1", example1Int = 1 },
        new ExampleClass1 { example1String = "abc2", example1Int = 2 }
    },
    param3 = new Dictionary<ExampleClass1, IEnumerable<ExampleClass2>>
    {
        { new ExampleClass1{ example1String = "abc1", example1Int = 1 }, new ExampleClass2[] { new ExampleClass2 { example2String = "xyz1", example2Int = 2 }, new ExampleClass2 { example2String = "xyz2", example2Int = 3 } } },
        { new ExampleClass1{ example1String = "abc2", example1Int = 4 }, new ExampleClass2[] { new ExampleClass2 { example2String = "xyz3", example2Int = 5 }, new ExampleClass2 { example2String = "xyz4", example2Int = 6 } } }
    }
};