.net - 如何仅序列化某些对象属性

标签 .net serialization

给定这样的对象:

Foo foo = new Foo
{
    A = "a",
    B = "b",
    C = "c",
    D = "d"
};

如何仅序列化和反序列化某些属性(例如 A 和 D)。

Original: 
  { A = "a", B = "b", C = "c", D = "d" }

Serialized:
  { A = "a", D = "d" }

Deserialized:
  { A = "a", B = null, C = null, D = "d" }

我使用 System.Web.Extensions.dll 中的 JavaScriptSerializer 编写了一些代码:

public string Serialize<T>(T obj, Func<T, object> filter)
{
    return new JavaScriptSerializer().Serialize(filter(obj));
}

public T Deserialize<T>(string input)
{
    return new JavaScriptSerializer().Deserialize<T>(input);
}

void Test()
{
    var filter = new Func<Foo, object>(o => new { o.A, o.D });

    string serialized = Serialize(foo, filter);
    // {"A":"a","D":"d"}

    Foo deserialized = Deserialize<Foo>(serialized);
    // { A = "a", B = null, C = null, D = "d" }
}

但我希望解串器的工作方式有所不同:

Foo output = new Foo
{
    A = "1",
    B = "2",
    C = "3",
    D = "4"
};

Deserialize(output, serialized);
// { A = "a", B = "2", C = "3", D = "d" }

有什么想法吗?

此外,可能有一些更好的或现有的替代方案可用吗?

编辑:

有人建议使用属性来指定可序列化字段。我正在寻找更动态的解决方案。这样我就可以序列化 A、B,下次序列化 C、D。

编辑2:

任何序列化解决方案(JSON、XML、Binary、Yaml...)都可以。

最佳答案

非常简单 - 只需使用 [ScriptIgnore] 属性装饰您希望忽略的方法即可。

关于.net - 如何仅序列化某些对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/950211/

相关文章:

javascript - 从 Node js中的文件读取序列化的对象数组

c# - MEF 和序列化

serialization - 使用私有(private)构造函数的 Boost 序列化适用于 1.57,不适用于 1.58

.net - 整个.NET Framework使用哪些设计模式?

c# - 如何在 C# 中以管理员模式启动进程

c# - Java 中的移位比乘法和除法更快吗? 。网?

Java:哪些类必须实现可序列化

.net - 如何在谷歌音频播放器中设置 autoplay=true?

c# - 增加检索的记录数会成倍增加 linq 查询持续时间

java - 用于所有嵌入式带注释对象的单个自定义序列化程序,用它们的 id 替换它们