如何解决Newtonsoft Json如何有两种序列化模式?
我可以选择一个对象,使用下面的代码进行序列化,并且在序列化时无需[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\"}"
,我也想在反序列化上执行此操作。 这可能吗?
解决方法
您可以尝试使用继承
public class MyClass
{
public string bbb { get; set; }
public virtual string aaa { get; set; }
public virtual string ccc { get; set; }
}
public class MyClassA : MyClass
{
[JsonIgnore]
public override string ccc { get; set; }
}
public class MyClassC : MyClass
{
[JsonIgnore]
public override string aaa { get; set; }
}
var jsonClassA = new MyClassA()
{
aaa= "0000",ccc ="222",bbb = "1111"
};
var jsonClassC = new MyClassC()
{
aaa = "0000",ccc = "222",bbb = "1111"
};
//{"bbb":"1111","aaa":"0000"}
String strA = JsonConvert.SerializeObject((MyClass)jsonClassA);
//{"bbb":"1111","ccc":"222"}
String strC = JsonConvert.SerializeObject((MyClass)jsonClassC);
,
创建2个实现两种模式的类:
namespace MyProject
{
public class MyClass
{
public string aaa { get; set; }
public string bbb { get; set; }
public string ccc { get; set; }
public string SerialisePattern1 => JsonConvert.SerializeObject(new MyClass_Pattern1 { Underlying = this });
public string SerialisePattern2 => JsonConvert.SerializeObject(new MyClass_Pattern2 { Underlying = this });
}
public class MyClass_Pattern1
{
public string aaa => Underlying.aaa;
public string ccc => Underlying.ccc;
[JsonIgnore]
public MyClass Underlying { get; set; }
}
public class MyClass_Pattern2
{
public string bbb => Underlying.bbb;
public string ccc => Underlying.ccc;
[JsonIgnore]
public MyClass Underlying { get; set; }
}
}
或:
namespace MyProject
{
public class MyClass
{
public string aaa { get; set; }
public string bbb { get; set; }
public string ccc { get; set; }
public string SerialisePattern1 => JsonConvert.SerializeObject(new { aaa,ccc });
public string SerialisePattern2 => JsonConvert.SerializeObject(new { bbb,ccc });
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。