【发布时间】:2020-11-12 10:47:24
【问题描述】:
我可以使用下面的代码选择一个要序列化的对象,我可以在序列化时忽略没有 [DataMember] 的对象。
namespace MyProject
{
[DataContract]
public class MyClass
{
public string aaa { get; set; }
[DataMember] public string bbb { get; set; }
[DataMember] public string ccc { get; set; }
}
}
String str = JsonConvert.SerializeObject((MyClass)jsonClass);
// "{\"bbb\":\"1111\",\"ccc\":\"222\"}"
然后,我想切换两种序列化模式。如下图所示
namespace MyProject
{
[DataContract]
public class MyClass
{
[DataMember_pattern1] public string aaa { get; set; }
[DataMember_pattern1, DataMember_pattern2] public string bbb { get; set; }
[DataMember_pattern2] public string ccc { get; set; }
}
}
// output I need
// serialized in pattern1
// "{\"aaa\":\"0000\", \"bbb\":\"1111\"}"
// serialized in pattern2
// "{\"bbb\":\"1111\",\"ccc\":\"222\"}"
我也想在反序列化时这样做。 这可能吗?
【问题讨论】:
-
不要自定义序列化程序。为“patter1”和“pattern2”创建两个不同的 DTO,并根据您当前的需求对其进行序列化。
-
我从你的问题中假设它总是相同的类型? IE。当您序列化和反序列化时,您都知道它是 MyClass 吗?在这种情况下,您如何决定要遵循哪种模式?班级内的旗帜?还是外部的东西?
标签: c# json serialization json.net deserialization