c# - 序列化列表计数而不是列表
问题描述
我正在将 Web 服务接收到的 XML 请求记录在 JSON 文件中。我们有一个具有所有属性的类,如下所示:
class RequestExternal
{
[XmlAttribute("FirstName")]
[JsonProperty]
public string Firstname{get; set;}
[XmlAttribute("FirstName")]
[JsonProperty]
public string LastName{get; set;}
[XmlAttribute("FirstName")]
[JsonProperty] -- To be changed : Want to log this as PaymentCards.Count
public List<Object> PaymentCards{get; set;}
}
我想将此请求记录为:
{
FirstName: 'XXX',
LastName: 'XXX',
PaymentCount: **count of PaymentCard list**
}
有没有办法通过 JsonConverter 或其他方法来做到这一点?
我可以通过引入一个新的派生属性来做到这一点。
但这对我不起作用。我们有一个文档机制,可以将这些新属性公开给客户。
解决方案
取决于您的用例的具体情况以及您是否有权访问类定义。您可以轻松编写转换器并注释属性
给定
public class ListToCountConverter : JsonConverter<IList>
{
public override void WriteJson(JsonWriter writer, IList value, JsonSerializer serializer)
=> writer.WriteValue(value.Count);
public override IList ReadJson(JsonReader reader, Type objectType, IList existingValue, bool hasExistingValue, JsonSerializer serializer)
=> throw new NotImplementedException();
}
你的班
class RequestExternal
{
...
[JsonProperty]
[JsonConverter(typeof(ListToCountConverter))]
public List<Object> PaymentCards { get; set; }
}
例子
var test = new RequestExternal()
{
Firstname = "Bob",
LastName = "Derp",
PaymentCards = new List<object>(){null,null,null}
};
var result = JsonConvert.SerializeObject(test, Formatting.Indented);
Console.WriteLine(result);
输出
{
"Firstname": "Bob",
"LastName": "Derp",
"PaymentCards": 3
}
推荐阅读
- dataset - 如何在 colab 中加载巨大的数据集以转换为 spacy JSON?
- c++ - 找不到重复案例时,“案例标签值已出现在此开关中”
- php - 通过php连接到sql server时未建立连接
- javascript - 使用 PrimeNG DynamicDialog 的 mouseenter mouseleave 问题
- qt - 在 Designer / Creator 中管理 QWidgets 的操作列表?
- javascript - 更改显示属性时,有序列表向左移动
- flutter - Flutter:无法使用 GradleUserHomeServices.createResourceSnapshotterCacheService() 创建 ResourceSnapshotterCacheService 类型的服务
- flutter - 如何将 context.read 传递给 Flutter 中的子小部件?潜在的 BuildContext 错误问题
- node.js - 快速会话不存在
- c# - 在 C# Winforms 中将数据添加到行 var xmlDocument