C# 仅使用特定字段将POCO转换为json

C# 仅使用特定字段将POCO转换为json,c#,json,razor,C#,Json,Razor,我有一个对象Project,它包含许多字段,有些复杂,有些不复杂。它是一个EF类,所以我不能编辑它来添加属性 我只想生成一个JSON对象,包含两个字段,一个int id和一个string name 我不想为这个创建另一个ViewModel 在我的viewmodel中,我有一个列表。有没有一种方法可以使用HTML帮助程序只获取我选择的属性的JSON表示,而不使用属性 以下是项目类的一个示例: 这里的最终目标是将json作为var直接输出到视图,以便在构建JsGrid时使用它 如果有一种使用Html

我有一个对象Project,它包含许多字段,有些复杂,有些不复杂。它是一个EF类,所以我不能编辑它来添加属性

我只想生成一个JSON对象,包含两个字段,一个int id和一个string name

我不想为这个创建另一个ViewModel

在我的viewmodel中,我有一个列表。有没有一种方法可以使用HTML帮助程序只获取我选择的属性的JSON表示,而不使用属性

以下是项目类的一个示例:

这里的最终目标是将json作为var直接输出到视图,以便在构建JsGrid时使用它

如果有一种使用Html助手的方法,那就太好了


谢谢

Json.NET具有强大的内置功能。如果使用[JsonIgnore]属性标记要排除的属性,序列化程序将不会序列化该属性

[JsonIgnore]
public bool IsValid { get; set; }

Json.NET有一个很好的内置特性。如果使用[JsonIgnore]属性标记要排除的属性,序列化程序将不会序列化该属性

[JsonIgnore]
public bool IsValid { get; set; }

还请注意,如果您使用[DataContract]或[JsonObjectMemberSerialization=MemberSerialization.OptIn]装饰类,则可以通过另一种方式获得该类-因此,只有使用[JsonProperty]或[DataMember]装饰属性时,属性才会序列化。我知道该功能。在我的问题中,我明确指出使用属性是不可能的,因为该类是一个EF类,我希望避免仅为一个类创建viewmodel。好的,您可以在EF模型中使用属性装饰,假设该程序集中有Json.NET,但这不是一个很好的选择。除非您想编写一些自定义反射例程,否则我只需要创建一个视图模型。这将是做这件事的可靠方法。用于数据访问的实体,用于在UIYeah中显示的视图模型。。我想你是对的。我将为每个类创建一个viewmodel,如果需要,稍后再重新使用它们。使用EF很好,但当你尝试做其他事情时,它也会绊倒你…EF可能是一种祝福,也可能是一种诅咒。通常,将EF POCO作为数据的严格表示,并仅在数据库访问时使用,这是一个很好的规则。由于DB表可能不是用户界面显示内容的1对1表示形式,因此建议使用视图模型或DTO,这是不可避免的。另外请注意,如果使用[DataContract]或[JsonObjectMemberSerialization=MemberSerialization.OptIn]装饰类,您可以通过另一种方式获得它——这样,只有在您使用[JsonProperty]或[DataMember]装饰属性时,属性才会被序列化。我知道这一特性。在我的问题中,我明确指出使用属性是不可能的,因为该类是一个EF类,我希望避免仅为一个类创建viewmodel。好的,您可以在EF模型中使用属性装饰,假设该程序集中有Json.NET,但这不是一个很好的选择。除非您想编写一些自定义反射例程,否则我只需要创建一个视图模型。这将是做这件事的可靠方法。用于数据访问的实体,用于在UIYeah中显示的视图模型。。我想你是对的。我将为每个类创建一个viewmodel,如果需要,稍后再重新使用它们。使用EF很好,但当你尝试做其他事情时,它也会绊倒你…EF可能是一种祝福,也可能是一种诅咒。通常,将EF POCO作为数据的严格表示,并仅在数据库访问时使用,这是一个很好的规则。由于DB表可能不是UI显示内容的1对1表示,因此建议使用视图模型或DTO,这是不可避免的。
[JsonIgnore]
public bool IsValid { get; set; }