Neo4jclient 使用 Json.net 来解析数据类,因此您可以将方法添加到 Json.net 将查找的数据类中,格式为ShouldSerializePROPERTYNAME
(参见下面的示例)。
public class Actor
{
public string Name { get;set;}
public Collection<string> Alternatives { get;set; }
//This method lets Json.Net know whether to serialize 'Alternatives'
public bool ShouldSerializeAlternatives()
{
return Alternatives != null && Alternatives.Any();
}
}
这将序列new Actor{Name = "Jeff", Alternatives=new Collection<string>()}
化为:{"Name":"Jeff"}
- 完全没有Alternatives
。
显然,这里的缺点是你的类在反序列化时会有一个空集合——你可能会接受,或者不接受——如果不是——你可以在构造函数中粘贴一个初始化器:
public Actor() { Alternatives = new Collection<string>(); }
当 Json.Net 反序列化对象时将调用它。
还有另一种使用IContractResolver的方法,但如果您可以访问数据类,则上述方法是最简单的。
除了不序列化它之外,没有其他方法可以绕过空集合,因为 neo4j 不允许您发送数据。
- 编辑 -
public class BaseData
{
public Guid Id { get; set; }
public Collection<string> Subjects { get; set; }
public bool ShouldSerializeSubjects()
{
return Subjects != null && Subjects.Any();
}
public BaseData()
{
Subjects = new Collection<string>();
}
}
public class ParentData :BaseData {}
public class ChildData : ParentData
{
public string Name { get; set; }
public string Description { get; set; }
}
class Program
{
static void Main()
{
var client = new GraphClient(new Uri("http://localhost.:7474/db/data/"));
client.Connect();
var cd = new ChildData { Name = "c1", Description = "des", Id = Guid.NewGuid() };
var nodeRef = client.Create(cd);
var cdRetrieved = client.Get<ChildData>(nodeRef);
Console.WriteLine("Name: {0}, Description: {1}, Id: {2}, Subjects: {3}", cd.Name, cd.Description, cd.Id, cd.Subjects.Count);
Console.WriteLine("Name: {0}, Description: {1}, Id: {2}, Subjects: {3}", cdRetrieved.Data.Name, cdRetrieved.Data.Description, cdRetrieved.Data.Id, cdRetrieved.Data.Subjects.Count);
var json = JsonConvert.SerializeObject(cd);
Console.WriteLine(json);
}
给出以下输出:
Name: c1, Description: des, Id: ff21b0fe-0a51-4269-a1d4-e148c905a6d7, Subjects: 0
Name: c1, Description: des, Id: ff21b0fe-0a51-4269-a1d4-e148c905a6d7, Subjects: 0
{"Name":"c1","Description":"des","Id":"ff21b0fe-0a51-4269-a1d4-e148c905a6d7"}
最后一行是 Json.Net 的实际 JSON 输出,没有序列化“主题”。