我正在使用 Windows Communication Foundation 类通过
DataContractJsonSerializer
类对文件中的 JSON 进行序列化和反序列化。我知道在 .NET Framework 中有更好的方法来序列化和反序列化 JSON,但我仅限于使用 Windows 10 附带的类。
我有一个由两个数据成员组成的类,它具有标准字符串表示形式。
[DataContract]
public class Joiner
{
public int Prefix { get; set; }
public int Suffix { get; set; }
public override ToString()
{
return $"{Prefix}.{Suffix}"
}
}
我想将这样的类序列化和反序列化为字符串文字,而不是带有成员字段的 JSON 对象。我可以添加另一个标有
[DataMember]
的属性,它有一个自定义 setter 和 getter 来分配和提取其他属性,但我不知道如何告诉 WCF 如何将该类视为其感兴趣的单个成员。
更一般地说,我想对其他类使用相同的技术。也许具有单个整数成员的类可以被序列化为整数基元,这样它们的列表就可以不那么冗长(并且在手动完成时更容易编辑这样的文件)。
当这些具有基元表示的类之一在另一种类型的数组成员中使用时,我可以添加一个单独的
[DataMember]
属性以及预期基元的数组,并使用其 setter 和 getter 进行转换。
[DataContract]
public class Box
{
public Joiner[] Joiners { get; set; }
[DataMember(Name = "Joiners")]
public string[] JoinerStrings
{
get {
var js = new string[Joiners.Length];
for (int i = 0; i < js.Length; ++i)
{
js[i] = Joiners[i].ToString();
}
return js;
}
set {
var j = new Joiner[value.Length];
for (int i = 0; i < j.Length; ++i)
{
var ints = value[i].Split('.');
j[i] = new Joiner{ Prefix = int.Parse(ints[0]), Suffix = int.Parse(ints[1]) };
}
Joiners = j;
}
}
但是,如果在多个地方使用此类类,则此解决方案不太灵活并且更冗长。
有谁知道如何做到这一点?如果确实有必要实现此目标,我也愿意使用 WCF 类以外的其他内容进行 JSON 序列化,但我仍然仅限于 .NET Framework 4.8 提供的类。