我有一个包含8个属性和值的列表。但我想只得到其中一些IOType ==" O"并转换为json格式。
如果我像LINQ一样使用
excelIO.Where(m => m.IOType == "O").Select(m => new ExcelBo { InterfaceColId = m.InterfaceColId, IOValue = m.IOValue }).ToList();
return JsonConvert.SerializeObject(excelBoList);
当前输出
[{"FunctionWBId":0,"ExcelCellNo":null,"IOType":null,
"InterfaceColId":"txtPrmServicTaxAmt","IOValue":"0.00","DataType":null,
"Status":null,"FunctionWBMap":null},
{"FunctionWBId":0,"ExcelCellNo":null,"IOType":null,
"InterfaceColId":"txtPrmStampDutyAmt","IOValue":"10.00",
"DataType":null,"Status":null,"FunctionWBMap":null}]
所需的输出:" InterfaceColId"值将是一个字符串和' IOValue"价值将是一个价值。
[{"txtPrmServicTaxAmt":"0.00","txtPrmStampDutyAmt" :"10.00"}]
请帮我提供所需的输出?
答案 0 :(得分:0)
最简单的方法是将值存储到字典而不是列表中:
var excelBoDict = excelIO.Where(m => m.IOType == "O")
.ToDictionary(x => x.InterfaceColId, y => y.IOValue);
return JsonConvert.SerializeObject(excelBoDict);
这将被序列化为:
[{"txtPrmServicTaxAmt":"0.00","txtPrmStampDutyAmt" :"10.00"}]
如果您没有InterfaceColId
的重复值,它将起作用。如果是这样,我猜你需要以下列方式基于JsonTextWriter
(example usage)实现自己的序列化程序:
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
using (JsonWriter writer = new JsonTextWriter(sw))
{
writer.WriteStartObject();
foreach(var item in excelBoList)
{
writer.WritePropertyName(item.InterfaceColId);
writer.WriteValue(item.IOValue);
}
writer.WriteEnd();
writer.WriteEndObject();
}
var result = sb.ToString();
请注意,如果您有多个具有单个名称的属性 - 这可能会导致不可预测的行为。