using Newtonsoft.Json.Serialization;
using System.Collections.Generic;
public static void Main()
JsonSerializerSettings settings = new JsonSerializerSettings
ContractResolver = new CustomResolver(new []
PreserveReferencesHandling = PreserveReferencesHandling.None,
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
Formatting = Formatting.Indented
var json = JsonConvert.SerializeObject(pc, settings);
public int FileFolderId {get;set;}
public virtual ICollection<string> Libs { get; set; }
public virtual ICollection<string> Books { get; set; }
public virtual ICollection<string> Files { get; set; }
class CustomResolver : DefaultContractResolver
private readonly List<string> _namesOfVirtualPropsToKeep=new List<string>(new String[]{});
public CustomResolver(IEnumerable<string> namesOfVirtualPropsToKeep)
this._namesOfVirtualPropsToKeep=namesOfVirtualPropsToKeep.Select(x=>x.ToLower()).ToList();
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
JsonProperty prop = base.CreateProperty(member, memberSerialization);
var propInfo = member as PropertyInfo;
if (propInfo.GetMethod.IsVirtual && !propInfo.GetMethod.IsFinal
&& !_namesOfVirtualPropsToKeep.Contains(propInfo.Name.ToLower()))
prop.ShouldSerialize = obj => false;