【问题标题】:How to use Json (C#) to serialize an object ignoring certain properties如何使用 Json (C#) 序列化忽略某些属性的对象
【发布时间】:2018-05-11 13:22:49
【问题描述】:

这应该很容易,但经过一天的实验后,我更加困惑。 这在测试场景中非常有用 基本上,我想轻松地将测试中创建的对象与我期望的对象进行比较,但忽略无关紧要的属性。 对象是 WPF 应用程序,我正在重构关键的初始化代码,所以场景是:

  • 我想制作一个以旧方式初始化的对象的 Json 副本(没有任何不重要的属性)作为 json 字符串并保存到“黄金”文件中
  • 运行测试 - 以新方式初始化对象
  • 将新对象序列化为 json 字符串 - 并在没有不重要属性的情况下写入文件
  • 加载黄金文件->字符串

  • 比较两个字符串

本质上,我想要的是顶级重要属性的字典(nae - 值作为字符串)。我对层次复杂性不感兴趣,因为如果需要,我可以在代码中做到这一点。 保持简单... 那里有许多 Json nugets,过滤被“隐藏”在 Json 封装中。 这对于单元测试来说是一个非常有用的想法,但我正在努力寻找一种(简单的)方法来做到这一点。我不想在主类中使用属​​性 - 因为这只是为了特定的测试。

我查看了很多帖子并尝试了各种想法,但都没有成功。 可以的话请帮忙看看

特里

【问题讨论】:

  • 如果没有你想比较的类的任何代码,真的很难给你任何想法,无论如何,这个网站是为了帮助解决特定问题。您的问题似乎类似于“请给我执行此操作的代码”。这就是为什么我投票关闭“太宽泛”。
  • 经常,当有人说他们尝试了“很多东西”,但他们没有引用任何这些东西时,他们没有尝试任何事情,但希望我们认为他们做到了。请用您尝试过的一些无效的方法来编辑您的问题。

标签: c# json


【解决方案1】:

您可以使用 newtonsoft Json.net 来做到这一点: https://www.newtonsoft.com/json/help/html/SerializationAttributes.htm

你只需要不设置 JsonPropertyAttribute

[JsonObject(MemberSerialization.OptIn)]
public class Person
{
    // "John Smith"
    [JsonProperty]
    public string Name { get; set; }

    // "2000-12-15T22:11:03"
    [JsonProperty]
    public DateTime BirthDate { get; set; }

    // new Date(976918263055)
    [JsonProperty]
    public DateTime LastModified { get; set; }

    // not serialized because mode is opt-in
    public string Department { get; set; }
}

【讨论】:

  • 这只有在成员序列化配置为使用[JsonObject(MemberSerialization.OptIn)]“选择加入”时才是正确的。否则应使用JsonIgnore 属性。
猜你喜欢
  • 2013-07-29
  • 2020-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多