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>>();
}
}