c# - 如何优雅地将下面的文字解析成字典

标签 c# .net regex json parsing

我有以下文本需要放入字典中。乍一看,我认为这会很容易,但最后我发现自己进行了大量的字符串搜索,有时会发现破坏解析器的值。

"0": 
{
    "key":"valueWithAnyCharInside",
    "key2":"valueWithAnyCharInside",
    "key3":"valueWithAnyCharInside" 
},

这将映射到以下模型:

class Item
{
    private int id;
    private Dictionary<string, string> data;
}

有什么想法吗?也许使用正则表达式 ...

最佳答案

您的数据格式可能是JSON,但您只提供了其中的一部分。我将其稍微修改为:

{"0":
    {
        "key":"valueWithAnyCharInside",
        "key2":"valueWithAnyCharInside",
        "key3":"valueWithAnyCharInside" 
    }
}

现在您可以按如下方式解析它:

string json = ...; //your json goes here

var serializer = new JavaScriptSerializer();
var parsed =  serializer.Deserialize<Dictionary<string, Dictionary<string, string>>>(json);

//printing data
parsed["0"].Select(pair => string.Format( "{0} - {1}", pair.Key, pair.Value))
           .ToList()
           .ForEach(Console.WriteLine);

打印:

key - valueWithAnyCharInside
key2 - valueWithAnyCharInside
key3 - valueWithAnyCharInside

获得强类型 List<Item>使用下一个代码

List<Item> items = parsed.Select(pair => new Item { Id = int.Parse(pair.Key),
                                                    Data = pair.Value})
                         .ToList();

项目在哪里:

class Item
{
    public int Id { get; set; }
    public Dictionary<string, string> Data {get;set;}
}

关于c# - 如何优雅地将下面的文字解析成字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16789303/

相关文章:

c# - 我如何聚焦外国窗口?

javascript - 如何删除 "()"之间的文本

JavaScript.replace(),删除标签和内容

C# 单例日志记录类

c# - 如何在经典 .NET 的 EF 6 Code First 中使用 SQL Server JSON_VALUE 函数

c# - 我应该在我的类中包装我的类自定义异常吗?

c# - 最新 windows 10 更新后 Visual Studio 2013 发布崩溃

c# - 逗号或分号分隔的自动完成文本框

c# - SqlCommand.ExecuteReader/SqlDataReader.Read 是否吞咽异常?

python - 找到时间戳列表中的最大间隔(Perl 首选)