[英]How to Serialize a Custom Object to Json in C#
我有一個像下面這樣的課程
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.
}
輸入 :
CustomObject
param1 : "abc"
param2 : List<ExampleClass1>
{abc1,1}
{abc2,2}
param3 : Map<ExampleClass1, List<ExampleClass2>>
<{abc1,1},[{xyz1,2},{xyz2,2}]>
<{abc2,2},[{xyz3,3},{xyz4,4}]>
輸出 :
param1 : "abc"
param2 : {abc1,1}
{abc2,2}
param3 :<{abc1,1},[{xyz1,2},{xyz2,2}]>
預期產出
param1 : "abc"
param2 : {abc1,1}
{abc2,2}
param3 :{abc1,1},[{xyz1,2},{xyz2,2}]
{abc2,2},[{xyz3,3},{xyz4,4}]
我想序列化這個類並使用以下方法將對象序列化為 json 字符串。
var serializedContent = JsonConvert.SerializeObject(CustomObject);
param1 和 param2 的輸出是正確的,但 param3 沒有正確序列化,它只顯示一條記錄。
我該如何解決這個問題? 我看到了可以序列化字典的示例,但是,如果它是類的成員,我如何實現類的完整序列化?
在CustomObject
具體看一下:
public Dictionary<ExampleClass1, IEnumerable<ExampleClass2>> param3;
你設置了一張地圖,關鍵是一個類。 在鍵是對象的情況下,映射如何工作? 它沒有。 您必須指定該類的“值”。 一個快速的方法是覆蓋ToString
。
所以試試這個:
public class ExampleClass1
{
public string example1String;
public int example1Int;
public override string ToString()
{
return example1String;
}
}
請記住,將ExampleClass1
鍵,您必須確保不存在其他具有相同值的ExampleClass1
,否則您的 JSON 中將有重復的鍵,這使得分析變得困難。
警告:我不知道如何將其反序列化回實際對象,因為它無法將字符串轉換為ExampleClass1
。 您可能不得不在對數據進行組合鍵的情況下做一些愚蠢的事情,然后制作一個自定義的 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 } } }
}
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.