我正在针对返回JSON数据的第三方API进行编程,但是格式可能有点奇怪。某些属性可以是一个对象(包含一个Id属性),也可以是一个字符串(它是该对象的ID)。例如,以下两个都是有效的:
{
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; }
}
但是,JsonProperty
在具有相同PropertyName的两个属性上设置属性会导致异常:
Newtonsoft.Json.JsonSerializationException:'.....'上已经存在一个名称为'ChildObject'的成员。使用JsonPropertyAttribute指定另一个名称。
我相当确定,如果我能克服此障碍,则JsonConverter方法将起作用-我怀疑错误在那里,因为JsonProperty属性用于序列化和反序列化。在这种情况下,我对序列化该类没有兴趣-它将仅用作反序列化的目标。
我无法控制远端(这是第三方API),但是我希望能够实现此序列化。我不在乎它是在使用我已经开始使用的方法,还是我尚未想到的方法。
这个问题也有关系,但是没有答案。
尝试以下操作(如果要在代码中使用它,请进行彻底的验证,以进行扩展):
public class MyObject
{
public ChildObject MyChildObject;
public string MyChildObjectId;
[JsonProperty("ChildObject")]
public object ChildObject
{
get
{
return MyChildObject;
}
set
{
if (value is JObject)
{
MyChildObject = ((JToken)value).ToObject<ChildObject>();
MyChildObjectId = MyChildObject.Id;
}
else
{
MyChildObjectId = value.ToString();
MyChildObject = null;
}
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句