不知道为什么您的代码不起作用(可能是Json.NET错误?)。相反,您可以从中删除不需要的属性,
JObject并在一个调用中编写整个内容:
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { // Find properties of inherited class var classType = value.GetType(); var classProps = classType.GetProperties(BindingFlags.Declaredonly | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).ToList(); // Remove the overrided properties classProps.RemoveAll(t => { var getMethod = t.GetGetMethod(false); return (getMethod.GetbaseDefinition() != getMethod); }); // Get json data var o = (JObject)JToken.FromObject(value); // Remove all base properties foreach (var p in o.Properties().Where(p => !classProps.Select(t => t.Name).Contains(p.Name)).ToList()) p.Remove(); o.WriteTo(writer); }
另外,您可以创建自己的合同解析器并过滤基本属性和成员:
public class EverythingButbaseContractResolver : DefaultContractResolver{ protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization) { if (member.ReflectedType != member.DeclaringType) return null; if (member is PropertyInfo) { var getMethod = ((PropertyInfo)member).GetGetMethod(false); if (getMethod.GetbaseDefinition() != getMethod) return null; } var property = base.CreateProperty(member, memberSerialization); return property; }}
然后像这样使用它:
var settings = new JsonSerializerSettings { ContractResolver = new EverythingButbaseContractResolver() }; var json = JsonConvert.SerializeObject(rootObject, Formatting.Indented, settings);
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)