我有两种格式的JSON,我想反序列化到一个类。我知道我们不能将两个[JsonProperty]
属性应用于一个属性。
你能建议我一个方法来实现这一点吗?
string json1 = @"
{
'field1': '123456789012345',
'specifications': {
'name1': 'HFE'
}
}";
string json2 = @"
{
'field1': '123456789012345',
'specifications': {
'name2': 'HFE'
}
}";
public class Specifications
{
[JsonProperty("name1")]
public string CodeModel { get; set; }
}
public class ClassToDeserialize
{
[JsonProperty("field1")]
public string Vin { get; set; }
[JsonProperty("specification")]
public Specifications Specifications { get; set; }
}
我希望name1
和name2
都被反序列化为规范类的name1
属性。
5条答案
按热度按时间waxmsbnn1#
一个不需要转换器的简单解决方案:只需添加第二个私有属性到您的类中,用
[JsonProperty("name2")]
标记它,并让它设置第一个属性:小提琴:https://dotnetfiddle.net/z3KJj5
du7egjpx2#
欺骗自定义JsonConverter对我很有效。Thanks@khaled4vokalz,@Khanh TO
fcy6dtqo3#
您可以使用JsonConverter来执行此操作。
例如,当您使用来自第三方服务的一些数据时,它们会不断更改属性名称,然后返回到以前的属性名称,这很有用。:D
下面的代码演示如何将多个属性名反序列化为用
[JsonProperty(PropertyName = "EnrollmentStatusEffectiveDateStr")]
属性修饰的同一个类属性。类
MediCalFFSPhysician
也使用自定义的JsonConverter进行修饰:[JsonConverter(typeof(MediCalFFSPhysicianConverter))]
请注意,
_propertyMappings
字典保存了应该Map到EnrollmentStatusEffectiveDateStr
属性的可能属性名称:完整代码:
输出如下:
改编自:Deserializing different JSON structures to the same C# class
qv7cva1a4#
我有同样的用例,虽然在Java中。
帮助https://www.baeldung.com/json-multiple-fields-single-java-field的资源
我们可以用一个
在您的用例中,您可以
fcwjkofz5#
您甚至可以为两个以上的名称执行此操作。