使用.NET Framework的WCF将类序列化为原语

问题描述 投票:0回答:1

我正在使用 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 提供的类。

wcf .net-4.8 primitive-types json-serialization
1个回答
0
投票

我建议您使用JsonConvert.SerializeObject将传输的对象数据转换为字符串数据

JsonConvert.SerializeObject(object)

© www.soinside.com 2019 - 2024. All rights reserved.