Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何正确序列化包含列表的对象<;keyvaluepair<;字符串,字符串>&燃气轮机;转换成Json?_C#_Json_Serialization_Keyvaluepair - Fatal编程技术网

C# 如何正确序列化包含列表的对象<;keyvaluepair<;字符串,字符串>&燃气轮机;转换成Json?

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

我正在尝试序列化名为TableDTO的对象集合。此对象包含名称、日期和列表>。 我正在尝试使用C#中的Newtonsoft.Json库对其进行序列化

当我构造对象时,一切都很好。我像这样添加KeyValuePair:
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)所以今天晚些时候我们可以为你写。一旦你明白该做什么,这真的不难。