C# 如何正确序列化包含列表的对象<;keyvaluepair<;字符串,字符串>&燃气轮机;转换成Json?
我正在尝试序列化名为TableDTO的对象集合。此对象包含名称、日期和列表>。 我正在尝试使用C#中的Newtonsoft.Json库对其进行序列化 当我构造对象时,一切都很好。我像这样添加KeyValuePair:C# 如何正确序列化包含列表的对象<;keyvaluepair<;字符串,字符串>&燃气轮机;转换成Json?,c#,json,serialization,keyvaluepair,C#,Json,Serialization,Keyvaluepair,我正在尝试序列化名为TableDTO的对象集合。此对象包含名称、日期和列表>。 我正在尝试使用C#中的Newtonsoft.Json库对其进行序列化 当我构造对象时,一切都很好。我像这样添加KeyValuePair: mylist.Add(新的KeyValuePair($“Col{compteur}”,value.value)) 然后我将列表添加到我的TableDTOTableDTO.list=mylist 然后我像这样序列化我的对象 JsonConvert.SerializeObject(Ta
mylist.Add(新的KeyValuePair($“Col{compteur}”,value.value))代码>
然后我将列表添加到我的TableDTO
TableDTO.list=mylist
然后我像这样序列化我的对象
JsonConvert.SerializeObject(TableDto)强>
这是我得到的
{
“文件名”:“MEP_3_10$3aList.xlsx”,
“条件”:{“谓词”:“},
“数据行”:
[{“Key”:“Col1”,“Value”:“Value”},
{“Key”:“Col2”,“Value”:“Value”}]
}
我遇到的问题是当我序列化它时
而不是
{
{"Col1":"value"},
{"Col2":"value"}
}
列表是这样序列化的
{
{"Key" : "Col1","Value" : "value"},
{"Key" : "Col2","Value" : "value"}
}
我尝试使用stackoverflow中另一篇文章中描述的转换器,但由于列表是我对象的属性,所以不容易。
非常感谢您的帮助您遇到的问题是:NewtonSoft JSON无法处理字典键值和结构
请检查我的代码:
public class CustomJSONSerializationHelper
{
public string CustomSerialize(Dictionary<AuthorizationKey, ConditionalActionFlags> actionFlagMappings)
{
// ToArray() and use custom convertors, because NewtonSoft JSON can't handle dictionary key values and struct.
var jsonString = JsonConvert.SerializeObject(actionFlagMappings.ToArray(), new Newtonsoft.Json.Converters.StringEnumConverter(), new AuthorizationKeyJsonConverter());
return jsonString;
}
public Dictionary<AuthorizationKey, ConditionalActionFlags> CustomDeserialize(string jsonActionFlagMappings)
{
var resultArray = CustomDeserializeOverLoad(jsonActionFlagMappings);
return (resultArray != null) ? resultArray.ToList().ToDictionary(pair => pair.Key, pair => pair.Value) : null;
}
public KeyValuePair<AuthorizationKey, ConditionalActionFlags>[] CustomDeserializeOverLoad(string jsonActionFlagMappings)
{
var result = JsonConvert.DeserializeObject<KeyValuePair<AuthorizationKey, ConditionalActionFlags>[]>(jsonActionFlagMappings,
new Newtonsoft.Json.Converters.StringEnumConverter(), new AuthorizationKeyJsonConverter());
return result;
}
}
公共类CustomJSONSerializationHelper
{
公共字符串CustomSerialize(字典actionFlagMappings)
{
//ToArray()并使用自定义转换器,因为NewtonSoft JSON无法处理字典键值和结构。
var jsonString=JsonConvert.SerializeObject(actionFlagMappings.ToArray()、新的Newtonsoft.Json.Converters.StringEnumConverter()、新的AuthorizationKeyJsonConverter());
返回jsonString;
}
公共字典自定义反序列化(字符串jsonActionFlagMappings)
{
var resultArray=CustomDeserializeOverLoad(jsonActionFlagMappings);
return(resultArray!=null)?resultArray.ToList().ToDictionary(pair=>pair.Key,pair=>pair.Value):null;
}
public KeyValuePair[]CustomDeserializeOverLoad(字符串jsonActionFlagMappings)
{
var result=JsonConvert.DeserializeObject(jsonActionFlagMappings,
新的Newtonsoft.Json.Converters.StringEnumConverter(),新的AuthorizationKeyJsonConverter());
返回结果;
}
}
我这样称呼它:
private string ObjectToJSON(Dictionary<AuthorizationKey, ConditionalActionFlags> actionFlagsMapping)
{
CustomJSONSerializationHelper customSerializationHelper = new CustomJSONSerializationHelper();
return customSerializationHelper.CustomSerialize(actionFlagsMapping);
}
私有字符串ObjectToJSON(字典actionFlagsMapping)
{
CustomJSONSerializationHelper customSerializationHelper=新CustomJSONSerializationHelper();
返回customSerializationHelper.CustomSerialize(actionFlagsMapping);
}
您能分享更多您的代码吗?我最近做的和你在这里尝试做的完全一样,所以请给我更多的信息以便我可以帮助你。你想要的JSON是无效的。上传到,您将在第1行:{{“Col1”:“value”
上得到一个错误错误:Parse error
是一组无序的名称/值对,但您的外部容器没有属性名称。您只有字典问题。我甚至还必须序列化结构。这就是为什么我的代码有一个额外的类AuthorizationKeyJsonConverter。您不需要这个,只需对字典使用修复。您能在上下文中使用我的代码吗?请让我知道。如果没有,请分享你的代码,今天晚些时候我会看。不幸的是,没有…我不懂它以及如何使用它。如果可以的话,请分享你的代码。(the.sln)所以今天晚些时候我们可以为你写。一旦你明白该做什么,这真的不难。