我正在针对一个第三方API进行编程,该API返回JSON数据,但格式可能有些奇怪。某些属性既可以是一个对象(包含一个Id属性),也可以是一个字符串(表示对象的Id)。例如,以下两种格式都是有效的:
我正在尝试使用JSON.net将其反序列化为强类型类,但是到目前为止运气不太好。我最好的想法是将其序列化为两个属性,一个是字符串,另一个是对象,并使用自定义的JsonConverter来允许变量行为。
然而,对具有相同PropertyName的两个属性设置JsonProperty属性会导致异常:
Newtonsoft.Json.JsonSerializationException:在“.....”上已存在名称为'ChildObject'的成员。 请使用JsonPropertyAttribute指定另一个名称。
我相当确定如果能克服这个障碍,JsonConverter方法会起作用 - 我怀疑错误出在这里,因为JsonProperty属性既用于序列化又用于反序列化。在这种情况下,我对序列化这个类没有兴趣 - 它只会被用作反序列化的目标。
我对远程端没有控制权(它是第三方API),但我希望能够实现这种反序列化。我不介意使用我已经开始的方法,或者我还没有考虑过的方法。 这个问题也相关,但没有答案。
{
ChildObject: 'childobjectkey1'
}
并且
{
ChildObject: {
Id: 'childobjectkey1',
// (other properties)
}
}
我正在尝试使用JSON.net将其反序列化为强类型类,但是到目前为止运气不太好。我最好的想法是将其序列化为两个属性,一个是字符串,另一个是对象,并使用自定义的JsonConverter来允许变量行为。
public abstract class BaseEntity
{
public string Id { get; set; }
}
public class ChildObject : BaseEntity { }
public class MyObject
{
[JsonProperty("ChildObject")]
[JsonConverter(typeof(MyCustomIdConverter))]
public string ChildObjectId { get; set; }
[JsonProperty("ChildObject")]
[JsonConverter(typeof(MyCustomObjectConverter))]
public ChildObject ChildObject { get; set; }
}
然而,对具有相同PropertyName的两个属性设置JsonProperty属性会导致异常:
Newtonsoft.Json.JsonSerializationException:在“.....”上已存在名称为'ChildObject'的成员。 请使用JsonPropertyAttribute指定另一个名称。
我相当确定如果能克服这个障碍,JsonConverter方法会起作用 - 我怀疑错误出在这里,因为JsonProperty属性既用于序列化又用于反序列化。在这种情况下,我对序列化这个类没有兴趣 - 它只会被用作反序列化的目标。
我对远程端没有控制权(它是第三方API),但我希望能够实现这种反序列化。我不介意使用我已经开始的方法,或者我还没有考虑过的方法。 这个问题也相关,但没有答案。