Neo4j CypherTypeException:不支持包含非基元类型数组的属性

Neo4j CypherTypeException:不支持包含非基元类型数组的属性,neo4j,graph-databases,neo4jclient,Neo4j,Graph Databases,Neo4jclient,我在NEO4J 2.0.3中使用C#Client for NEO4J创建节点时遇到了这个异常。 我的节点结构是这样的 namespace UserGraph.BusinessObjects { public class UserInfo { public int UserID { get; set; } public string UserName { get; set; } public int HeadendId { get;

我在NEO4J 2.0.3中使用C#Client for NEO4J创建节点时遇到了这个异常。 我的节点结构是这样的

namespace UserGraph.BusinessObjects
{
    public class UserInfo
    {
        public int UserID { get; set; }
        public string UserName { get; set; }
        public int HeadendId { get; set; }
        public int Score { get; set; }
        public string ThirdPartyObjID { get; set; }
        public long ThirdPartyTypeId { get; set; }
        public string[] ThirdPartyFriendsIds { get; set; }
        public List<Programme> Programs { get; set; }
        public List<Channel> Channels { get; set; }
    }

    public class Channel
    {
        public long ChannelID { get; set; }
        public String ChannelName { get; set; }
    }

    public class Programme
    {
        public long ProgrammeID { get; set; }
        public String ProgrammeName { get; set; }
    }
}
namespace UserGraph.BusinessObjects
{
公共类用户信息
{
public int UserID{get;set;}
公共字符串用户名{get;set;}
public int HeadendId{get;set;}
公共整数分数{get;set;}
公共字符串ThirdPartyObjID{get;set;}
公共长第三方类型ID{get;set;}
公共字符串[]ThirdPartyFriendsIds{get;set;}
公共列表程序{get;set;}
公共列表频道{get;set;}
}
公共类频道
{
公共长ChannelID{get;set;}
公共字符串ChannelName{get;set;}
}
公课计划
{
公共长程序{get;set;}
公共字符串程序名{get;set;}
}
}
我认为Neo4j节点不保存复杂的数据。我搜索并找到了这个链接
有人能告诉我有没有什么方法可以将频道和节目对象列表存储在我的UserInfo类中。

我遇到了同样的问题,我不确定我是否同意所有复杂的“属性”都应该是关系的概念。最终,整个“节点”应该是可以序列化和存储的——这是使用JSON对节点进行序列化/反序列化的优点之一。编码如下

public class Address {
    public string Line1 { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string Country { get; set; }
}

public class User {
    public string Name { get; set; }
    public string email { get; set; }
    public Address HomeAddress { get; set; }
    public Address WorkAddress { get; set; }
}

虽然可以为地址创建节点,但我想问一个问题——为什么要强迫开发人员为类似的东西创建节点和关系。如果我从未打算独立于主用户对Address类的属性进行任何直接查询,那么将整个用户视为一个复杂对象并将其全部存储为图中节点的数据要简单得多。

例外情况是,您只能存储一个基元类型数组。在我看来,您最好在不同的节点类型之间添加一个关系。感谢@stephenmuss的快速回复。这意味着我应该为用户信息、频道和节目创建单独的节点。一旦建立了,我就应该在他们之间建立关系。没错。我完全同意@stephenmuss的观点,但正如你所知,如果你真的想存储这些元素,你基本上需要使用自定义序列化程序——你可能会发现你需要使用字典之类的东西,例如