使用JSON.Net,如何让反序列化过程忽略从父类继承的字段(我无权访问)。
我的JSON Feed中有一个字段,其名称与从系统类继承的名称相同。当它试图反序列化时,它会因此而失败(带有确切的错误消息:
A member with the name 'Location' already exists on 'Client.JSON.MyClass'. Use the JsonPropertyAttribute to specify another name.
位置在父类中定义,父类也是一个系统类,因此我无权访问该类以定义JsonIgnore属性。
如何避免这种情况,以便在不尝试将JSON Location属性反序列化为MyClass继承的系统类的情况下进行反序列化?
最后一点,JSON提要是使用WCF数据服务生成的,因此包含'd'根数组 - 我被告知有关ContractResolver但由于'd'数组我无法使用它(使用以下代码):
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;
namespace Client.JSON
{
public class MyClassContractResolver : DefaultContractResolver
{
protected override IList<JsonProperty> CreateProperties(JsonObjectContract t)
{
IList<JsonProperty> properties = base.CreateProperties(t);
properties =
properties.Where(p => p.PropertyName.StartsWith('J'.ToString())).ToList();
return properties;
}
}
}
使用以下代码进行反序列化:
jsonAppointments = JsonConvert.DeserializeObject<RootMyClass>(myJsonString, new JsonSerializerSettings { ContractResolver = new MyClassContractResolver() });
如果有人知道如何做到这一点,我将不胜感激!谢谢。顺便说一下,这是使用Compact Framework。
答案 0 :(得分:0)
我遇到了类似的问题。我通过隐藏基本属性解决了这个问题,但没有改变它的行为。
假设Location
的类型为string
:
class MyClass : RootMyClass
{
[JsonIgnore] public new string Location
{
get
{
return base.Location;
}
set
{
base.Location = value;
}
}
}