C# 序列化名称-值对列表,排除键和值部分

C# 序列化名称-值对列表,排除键和值部分,c#,serialization,json.net,C#,Serialization,Json.net,我有下面的班级 using System; using System.Collections.Generic; using System.Text; using Newtonsoft.Json; namespace mynamespace { public class Incident { [JsonProperty("name")] public string Name { get; set; } [JsonProperty(

我有下面的班级

using System;
using System.Collections.Generic;
using System.Text;
using Newtonsoft.Json;

namespace mynamespace
{
    public class Incident
    {
        [JsonProperty("name")]
        public string Name { get; set; }

        [JsonProperty("components")]
        public List<KeyValuePair<string, string>> Components { get; set; }

        public Incident()
        {
            Components = new List<KeyValuePair<string, string>>();
        }
    }
}
我需要

{
   "name": "test",
   "components": {
       "ddd": "dssds"
   }
}
我连载了

var json = JsonConvert.SerializeObject(incident);
我该怎么做?我想我需要某种转换器

一个建议是

var test = new { name = incident.Name, components = incident.Components.Select(i => i.Value) };
var json = JsonConvert.SerializeObject(test);
这就产生了

{
  "name":"test",
  "components":["dssds"]
}
这与我上面要求的json不匹配


Paul

要获得所需的输出,
组件
需要是一个
字典
,而不是
列表
。因此,最简单的解决方案是将您的类更改为:

public class Incident
{
    [JsonProperty("name")]
    public string Name { get; set; }

    [JsonProperty("components")]
    public Dictionary<string, string> Components { get; set; }

    public Incident()
    {
        Components = new Dictionary<string, string>();
    }
}

Fiddle:

要获得想要的输出,
组件
需要是一个
字典
而不是
列表
。因此,最简单的解决方案是将您的类更改为:

public class Incident
{
    [JsonProperty("name")]
    public string Name { get; set; }

    [JsonProperty("components")]
    public Dictionary<string, string> Components { get; set; }

    public Incident()
    {
        Components = new Dictionary<string, string>();
    }
}

小提琴:我更新了问题。我不能有一个值列表,因为我需要如上所示的名称和值如果
组件
包含多个元素,那么预期结果如何?它将只有1个元素更新了问题。我不能有一个值列表,因为我需要如上所示的名称和值如果
组件
包含多个元素,那么预期结果如何?它将只有一个元素这是一个新项目,因此我几乎没有任何依赖项这是一个新项目,因此我几乎没有任何依赖项
public class Incident
{
    [JsonProperty("name")]
    public string Name { get; set; }

    [JsonIgnore]
    public List<KeyValuePair<string, string>> Components { get; set; }

    [JsonProperty("components")]
    private Dictionary<string, string> ComponentDictionary
    {
        get { return Components != null ? new Dictionary<string, string>(Components) : null; }
    }

    public Incident()
    {
        Components = new List<KeyValuePair<string, string>>();
    }
}