C# 将字典的字典转换为字符串

C# 将字典的字典转换为字符串,c#,tostring,C#,Tostring,我有一本字典: Dictionary<string, Dictionary<char, string>> myDict; 字典myDict; 我试图通过重写to string方法来输出它的内容,但我不知道如何将其转换为string 我试过: StringBuilder str = new StringBuilder(); foreach (Dictionary<string, Dictionary<char, string>> s in str

我有一本字典:

Dictionary<string, Dictionary<char, string>> myDict;
字典myDict;
我试图通过重写to string方法来输出它的内容,但我不知道如何将其转换为string

我试过:

StringBuilder str = new StringBuilder();
foreach (Dictionary<string, Dictionary<char, string>> s in str)
{
    myDict.Append(s.Keys).Append(",").Append(s.Values);
}
StringBuilder str=new StringBuilder();
foreach(str中的字典s)
{
myDict.Append(s.Keys).Append(“,”).Append(s.Values);
}
这不起作用

试试这个:

StringBuilder str = new StringBuilder();
foreach (var s in myDict)
{
    foreach (var i in s.Value)
    {
        //Key is char, Value is string
        str.Append("(")
           .Append(s.Key)
           .Append(",")
           .Append(i.Key)
           .Append(",")
           .Append(i.Value)
           .Append("),");
    }
}
//remove trailing ","
var s = str.ToString().Trim(",");
试试这个:

StringBuilder str = new StringBuilder();
foreach (var s in myDict)
{
    foreach (var i in s.Value)
    {
        //Key is char, Value is string
        str.Append("(")
           .Append(s.Key)
           .Append(",")
           .Append(i.Key)
           .Append(",")
           .Append(i.Value)
           .Append("),");
    }
}
//remove trailing ","
var s = str.ToString().Trim(",");

您的版本尝试打印
s.Keys
s.Values
,这两个都是集合。可以使用循环打印,但可以使用两次:

public override string ToString() {
    return string.Join(
        ",",
        myDict.Select(
            p => string.Format(
                "{0}:{1}",
                p.Key,
                string.Join(",", p.Value.Select(x => string.Format("{0}={1}", x.Key, x.Value)))
        )
    );
}
注意1:上述语法在两个调用中都使用而不是。例如,如果您使用的是较新版本的C#,您可以将其重写为较短的代码

string.Join(",", p.Value.Select(x => $"{x.Key}={x.Value}"))
注意2:对于较旧版本的.NET,请在两次选择后添加
ToArray()

return string.Join(
    ",",
    myDict.Select(
        p => string.Format(
            "{0}:{1}",
            p.Key,
            string.Join(",", p.Value.Select(x => string.Format("{0}={1}", x.Key, x.Value)).ToArray())
    ).ToArray()
));

您的版本尝试打印
s.Keys
s.Values
,这两个都是集合。可以使用循环打印,但可以使用两次:

public override string ToString() {
    return string.Join(
        ",",
        myDict.Select(
            p => string.Format(
                "{0}:{1}",
                p.Key,
                string.Join(",", p.Value.Select(x => string.Format("{0}={1}", x.Key, x.Value)))
        )
    );
}
注意1:上述语法在两个调用中都使用而不是。例如,如果您使用的是较新版本的C#,您可以将其重写为较短的代码

string.Join(",", p.Value.Select(x => $"{x.Key}={x.Value}"))
注意2:对于较旧版本的.NET,请在两次选择后添加
ToArray()

return string.Join(
    ",",
    myDict.Select(
        p => string.Format(
            "{0}:{1}",
            p.Key,
            string.Join(",", p.Value.Select(x => string.Format("{0}={1}", x.Key, x.Value)).ToArray())
    ).ToArray()
));
考虑使用,它支持将字典序列化为字符串

var values = new Dictionary<string, IDictionary<char, string>>
{
    {
        "test", new Dictionary<char, string>
        {
            ['a'] = "apple",
            ['b'] = "banana",
            ['c'] = "cat"
        }
    },
    {
        "lights", new Dictionary<char, string>
        {
            ['c'] = "compact fluorescent",
            ['l'] = "light emitting diode",
            ['i'] = "incandescent"
        }
    }
};

Console.WriteLine(JsonConvert.SerializeObject(values));
var值=新字典
{
{
“测试”,新字典
{
['a']=“苹果”,
['b']=“香蕉”,
['c']=“猫”
}
},
{
《灯光》,新词典
{
['c']=“紧凑型荧光灯”,
['l']=“发光二极管”,
['i']=“白炽灯”
}
}
};
WriteLine(JsonConvert.SerializeObject(值));
输出:

{“测试”:{“a”:“苹果”,“b”:“香蕉”,“c”:“猫”},“灯”:{“c”:“紧凑型荧光灯”,“l”:“发光二极管”,“i”:“白炽灯”}

考虑使用,它支持将字典序列化为字符串

var values = new Dictionary<string, IDictionary<char, string>>
{
    {
        "test", new Dictionary<char, string>
        {
            ['a'] = "apple",
            ['b'] = "banana",
            ['c'] = "cat"
        }
    },
    {
        "lights", new Dictionary<char, string>
        {
            ['c'] = "compact fluorescent",
            ['l'] = "light emitting diode",
            ['i'] = "incandescent"
        }
    }
};

Console.WriteLine(JsonConvert.SerializeObject(values));
var值=新字典
{
{
“测试”,新字典
{
['a']=“苹果”,
['b']=“香蕉”,
['c']=“猫”
}
},
{
《灯光》,新词典
{
['c']=“紧凑型荧光灯”,
['l']=“发光二极管”,
['i']=“白炽灯”
}
}
};
WriteLine(JsonConvert.SerializeObject(值));
输出:

{“测试”:{“a”:“苹果”,“b”:“香蕉”,“c”:“猫”},“灯”:{“c”:“紧凑型荧光灯”,“l”:“发光二极管”,“i”:“白炽灯”}



@TSB_1020是否在C#文件顶部导入了
System.Linq
?是的。错误消息显示:无法从“System.Collections.Generic.IEnumerable”转换为“string[]”@TSB_1020是否在.NET 3.5上?在两次选择后添加
ToArray()
调用。@TSB\u 1020请查看编辑@TSB_1020是否在C#文件顶部导入了
System.Linq
?是的。错误消息显示:无法从“System.Collections.Generic.IEnumerable”转换为“string[]”@TSB_1020是否在.NET 3.5上?在两次选择后添加
ToArray()
调用。@TSB\u 1020请查看编辑。这个给了我一个关于内部foreach loopOops中的“s”的错误。。。从我的头顶做这件事。。。等一下,这是有效的,但没有在字典中显示字符。在这种情况下,您也可以附加
i.Key
,我想确定您希望输出的内容。我希望它类似于(string,char,string),(string,char,string),…这一个在内部foreach循环中的“s”上给了我一个错误。。。从我的头顶做这件事。。。等一下,这是有效的,但没有在字典中显示字符。在这种情况下,您也可以附加
i.Key
,我想确定您希望输出的内容。我希望它类似(string,char,string),(string,char,string),…考虑到stringTransition未定义我怀疑它不起作用考虑到stringTransition未定义我怀疑它不起作用www。输出很好。Owww。输出很好。