Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 数据库字段的Json反序列化和asp.net mvc_C#_Asp.net Mvc_Angularjs_Entity Framework_Json.net - Fatal编程技术网

C# 数据库字段的Json反序列化和asp.net mvc

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, ...

假设我有一个通用记录表(我首先使用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,
  ....
}
我决定使用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。然后创建将详细信息反序列化到此属性中的方法。。。不是很优雅也不是很有效,因为我需要在循环中执行这个方法。。