C# 数据库字段的Json反序列化和asp.net mvc
假设我有一个通用记录表(我首先使用EF代码),并且可以使用许多不同类型的详细信息:C# 数据库字段的Json反序列化和asp.net mvc,c#,asp.net-mvc,angularjs,entity-framework,json.net,C#,Asp.net Mvc,Angularjs,Entity Framework,Json.net,假设我有一个通用记录表(我首先使用EF代码),并且可以使用许多不同类型的详细信息: class Record{ int Id, int TypeOfDetails, // int enum Type1, Type2 string Details, //string with json content string Attribute 1, string Atribute 2, ... } class DetailsType1{ string InternalAtribute1, ...
class Record{
int Id,
int TypeOfDetails, // int enum Type1, Type2
string Details, //string with json content
string Attribute 1,
string Atribute 2,
...
}
class DetailsType1{
string InternalAtribute1,
....
}
我决定使用Json将细节对象序列化到数据库字段中。
这允许在不更改DB模式的情况下灵活处理不同的细节
使用一条记录很容易,我知道Details对象的类型,所以我可以序列化和反序列化
但是如何高效地检索多个记录并能够在MVC中引用细节呢?
假设我这样做:
var results = await context.Record.Where(..).ToAsyncList();
我希望能够在我的.cshtml中执行此操作:
@Html.DisplayFor(modelItem => item.Record.Details.InternalAtribute1)
从本质上讲,它将在运行中进行反序列化
或者,如果在AngularJS中可以实现类似的功能,也会很有帮助
如果我把问题说清楚了,请告诉我 我会回答我的问题。我最清楚的是:
class Record{
int Id { get; set; }
int TypeOfDetails { get; set; } // int enum Type1, Type2
string JsonDetails { get; set; } //string with json content
string Attribute1 { get; set; }
string Atribute2 { get; set; }
...
[NotMapped]
public JObject Details { get; set; }
public void PopulateDetails()
{
Details = JObject.Parse(JsonDetails);
}
}
您仍然需要对所有查询结果执行PopulateDetails,我在foreach循环中这样做。
然后在CSHTML中可以执行以下操作:
@item.Details["InternalAtribute1"])
可以显示内部Json对象的详细信息。不清楚您想要实现什么。你能更详细地解释一下你想在
details
字段中保存什么吗?我想将object DetailsType1保存为json。可能还有DetailsType2和DetailsType3,所以我可以根据情况使用它们。将Object DetailsExpanded字段添加到[NoMapped]的记录类,以便不转到db。然后创建将详细信息反序列化到此属性中的方法。。。不是很优雅也不是很有效,因为我需要在循环中执行这个方法。。