PaR*_*RsH 0 c# serialization json jsonserializer json.net
我有以下模型结构。
public class ReferenceData
{
public string Version { get; set; }
public List<DataItem> Data { get; set; }
}
public class DataItem
{
public Dictionary<string, string> Item { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在字典中,我添加键值对并使用KeyValuePairConverter设置进行序列化。
var settings = new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver(),
NullValueHandling = NullValueHandling.Ignore,
Converters = new List<JsonConverter>() { new KeyValuePairConverter() }
};
var object = Newtonsoft.Json.JsonConvert.SerializeObject(
referenceData,
Formatting.None,
settings
);
Run Code Online (Sandbox Code Playgroud)
输出是,
{
"data":[
{
"item":{
"ShortDescription":"Lorem ipssumm",
"Title":"some text",
"PlanType":"ZEROP",
}
},
{
"item":{
"ShortDescription":"Lorem ipssumm",
"Title":"some text",
"PlanType":"ZEROP",
}
},
{
"item":{
"ShortDescription":"Lorem ipssumm",
"Title":"some text",
"PlanType":"ZEROP",
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
如果我们不想item在序列化字符串中显示,需要进行什么设置JsonSerializerSettings或者是否有其他方法可以做到这一点。
请注意,我无法根据需要更改模型结构。
输出应该是:
{
"data":[
{
"ShortDescription":"Lorem ipssumm",
"Title":"some text",
"PlanType":"ZEROP"
},
{
"ShortDescription":"Lorem ipssumm",
"Title":"some text",
"PlanType":"ZEROP"
},
{
"ShortDescription":"Lorem ipssumm",
"Title":"some text",
"PlanType":"ZEROP"
}
]
}
Run Code Online (Sandbox Code Playgroud)
如果您使用 Json.NET 5.0 版本 5 或更高版本,则不需要嵌套泛型集合。您可以使用JsonExtensionDataAttribute字典Item的键和值将序列化为父对象的一部分。
public class ReferenceData
{
public string version { get; set; }
public List<DataItem> data { get; set; }
}
public class DataItem
{
[JsonExtensionData]
public IDictionary<string, object> item { get; set; }
}
// ...
var referenceData = new ReferenceData {
version = "1.0",
data = new List<DataItem> {
new DataItem {
item = new Dictionary<string, object> {
{"1", "2"},
{"3", "4"}
}
},
new DataItem {
item = new Dictionary<string, object> {
{"5", "8"},
{"6", "7"}
}
}
}
};
Console.WriteLine(JsonConvert.SerializeObject(referenceData));
Run Code Online (Sandbox Code Playgroud)
请注意您需要Dictionary<string, object>而不是Dictionary<string, string>.
这是我得到的结果:
{
"version": "1.0",
"data": [
{
"1": "2",
"3": "4"
},
{
"5": "8",
"6": "7"
}
]
}
Run Code Online (Sandbox Code Playgroud)
显然,您可以删除Version属性以获得预期结果。
| 归档时间: |
|
| 查看次数: |
8039 次 |
| 最近记录: |