在 C# 中使用 Json.net 格式化 Json

Posted

技术标签:

【中文标题】在 C# 中使用 Json.net 格式化 Json【英文标题】:Json formatting with Json.net in C# 【发布时间】:2018-02-07 18:49:50 【问题描述】:

我正在尝试将一堆 XML 文件解析为一个 JSON 文件,该文件已经在工作。

最终的 JSON 文件如下所示:


"items": [
    
        "subItems": [
            
                "Name": "Name",
                "Value": "Value",
                "Type": "text"
            ,
            
                "Name": "Name",
                "Value": "Value",
                "Type": "text"
            
        ]
    ,
    
        "subItems": [
            
                "Name": "Name",
                "Value": "Value",
                "Type": "text"
            ,
            
                "Name": "Name",
                "Value": "Value",
                "Type": "text"
            ,
...

相反,我想实现以下结构:


"items": [
    [   
        
            "Name": "Name",
            "Value": "Value",
            "Type": "text"
        ,
        
            "Name": "Name",
            "Value": "Value",
            "Type": "text"
        

    ],
    [
        
            "Name": "Name",
            "Value": "Value",
            "Type": "text"
        ,
        
            "Name": "Name",
            "Value": "Value",
            "Type": "text"
        
    ]
]

但我不知道如何定义我的对象,我目前的结构如下:

public class Items

    public List<Item> items;


public class Item

    public List<SubItem> subItems;


public class SubItem

    public string Name  get; set; 
    public string Value  get; set; 
    public string Type  get; set; 

我应该怎么做?

【问题讨论】:

【参考方案1】:

答案很简单:将您的对象转换为列表:这将删除道具名称(以及 json 中的对象表示法)。

public class Items

    public List<Item> items; //list with prop name 'items'


public class Item : List<SubItem> // list in list like json notation



public class SubItem // Object in the list in list

    public string Name  get; set; 
    public string Value  get; set; 
    public string Type  get; set; 

正如@FlilipCordas 所说,从列表中继承是不好的做法(有充分的理由) 这样你会更好:

public class Items

    public List<List<SubItem>> items; //list with list with prop name 'items'


public class SubItem // Object in the list in list

    public string Name  get; set; 
    public string Value  get; set; 
    public string Type  get; set; 

【讨论】:

注意从列表继承通常被认为是bad practice。 然后直接使用public List&lt;List&lt;SubItem&gt;&gt; items;将是最好的解决方案。【参考方案2】:

复制您的 json,然后进入 Visual Studio。 点击“编辑”>“选择性粘贴”>“将 JSON 粘贴为类”

所有类都是自动创建的。我希望这个技巧可以帮助到你。

【讨论】:

以上是关于在 C# 中使用 Json.net 格式化 Json的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 json.net 将 c# 通用列表转换为 json?

如何使用 json.net 将 c# 通用列表转换为 json?

使用核心 .NET 在 C# 中编写 JSON 消息? [复制]

C# 使用 Json.NET 读取 JSON 内容时保留转义序列

如何在 C# 中动态转换来自 Json.NET 的解析 JSON 结果?

JSON.NET JsonIgnore DeserializeObject