gpt4 book ai didi

entity-framework - 如何在使用 Entity Framework 时序列化 ICollection 类型的属性

转载 作者:行者123 更新时间:2023-12-04 01:11:58 24 4
gpt4 key购买 nike

我有一个类,如下所示

public class Survey
{
public Survey()
{
SurveyResponses=new List<SurveyResponse>();
}

[Key]
public Guid SurveyId { get; set; }
public string SurveyName { get; set; }
public string SurveyDescription { get; set; }
public virtual ICollection<Question> Questions { get; set; }
public virtual ICollection<SurveyResponse> SurveyResponses { get; set; }
}

上面的代码给了我以下异常

Cannot serialize member 'SurveyGenerator.Survey.Questions' of type 'System.Collections.Generic.ICollection



当我将 ICollection 转换为 List 时,它会正确序列化

由于它是 Entity Framework 的 POCO,我无法将 ICollection 转换为 List

最佳答案

从您的类的外观来看,ICollection 属性正在定义外键关系?如果是这样,您就不想公开展示这些集合。

例如:如果您遵循开发 Entity Framework 模型的最佳实践指南,那么您将拥有一个名为“Question”的单独类,它将您的两个类连接在一起,如下所示:

public class Question
{
[Key]
public int Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }

public virtual Survey Survey { get; set; }
}

如果是这种情况,您很可能会绕圈子调用问题 -> 调查 -> ICollection -> 问题

我有一个类似的事件,使用 EF、MVC3 来实现 REST 服务并且无法序列化 ICollection<> 对象然后意识到我不需要,因为无论如何我都会单独调用该对象。

用于您目的的更新类如下所示:
public class Survey
{
public Survey()
{
SurveyResponses=new List<SurveyResponse>();
}

[Key]
public Guid SurveyId { get; set; }
public string SurveyName { get; set; }
public string SurveyDescription { get; set; }

[XmlIgnore]
[IgnoreDataMember]
public virtual ICollection<Question> Questions { get; set; }

[XmlIgnore]
[IgnoreDataMember]
public virtual ICollection<SurveyResponse> SurveyResponses { get; set; }
}

我希望这可以帮助你。

关于entity-framework - 如何在使用 Entity Framework 时序列化 ICollection<T> 类型的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7502658/

24 4 0