JSON.NET LINQ到实体错误

时间:2014-05-23 18:11:44

标签: c# linq-to-entities json.net

我不知道如何完成这项任务我已经尝试了很多方法,并且都会出现一个或另一个错误。我尝试过的几种方法并没有在我的错误中反而只是没有向我提供我正在寻找的结果。

我在最终结果中寻找的示例

{
    'type': 'NamedAA',
    'id': '63c0f27a-716e-804c-6873-cd99b945b63f',
    'x': 80,
    'y': 59,
    'width': 99,
    'height': 107,
    'userData': {

    },
    'cssClass': 'DBTable',
    'bgColor': '#DBDDDE',
    'color': '#D7D7D7',
    'stroke': 1,
    'alpha': 1,
    'radius': 3,
    'name': 'DuringHoursAutoAttendant',
    'entities': [
        {
            'text': 'id',
            'id': '49be7d78-4dcf-38ab-3733-b4108701f1'
        },
        {
            'text': 'employee_fk',
            'id': '49be7d78-4dcf-38ab-3733-b4108701fce4'
        }
    ]
}

给我错误的代码

  var aahope=new JObject(
    new JProperty("type", "NamedAA"),
    new JProperty("id",aaid),
    new JProperty("x",80),
    new JProperty("y",59),
    new JProperty("width",99),
    new JProperty("height",107),
    new JProperty("userData",new JObject()),
    new JProperty("cssClass", "DBTable"),
    new JProperty("bgColor", "#DBDDDE"),
    new JProperty("color", "#D7D7D7"),
    new JProperty("stroke",1),
    new JProperty("alpha",1),
    new JProperty("radius",3),
    new JProperty("name",""),
    new JProperty("entities", new JArray(
        (from e in db.HostedVoiceAAKeys
        where e.HostedVoiceAAID == aaid.HostedVoiceAAID
        select new JObject(
                    new JProperty("id",e.OptionKey),
                    new JProperty("text",e.OptionGuid))).ToArray()
        ))
    );

错误讯息:

  

LINQ to Entities中仅支持无参数构造函数和初始值设定项。

     

描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

     

异常详细信息:System.NotSupportedException:LINQ to Entities中仅支持无参数构造函数和初始值设定项。

Source Error: 

Line 2763:            var aaresults = "";
Line 2764:            var aahope=new JObject(
Line 2765:                new JProperty("type", "NamedAA"),
Line 2766:                new JProperty("id",aaid),

2 个答案:

答案 0 :(得分:3)

无需处理JObject / JProperty类。只需从这些类中创建一个对象

public class Entity
{
    public string text { get; set; }
    public string id { get; set; }
}

public class RootObject
{
    public string type { get; set; }
    public string id { get; set; }
    public int x { get; set; }
    public int y { get; set; }
    public int width { get; set; }
    public int height { get; set; }
    public UserData userData { get; set; }
    public string cssClass { get; set; }
    public string bgColor { get; set; }
    public string color { get; set; }
    public int stroke { get; set; }
    public int alpha { get; set; }
    public int radius { get; set; }
    public string name { get; set; }
    public List<Entity> entities { get; set; }
}

然后序列化您的对象

 string json = JsonConvert.SerializeObject(rootObj);

答案 1 :(得分:0)

LINQ to Entities不允许您使用带参数的构造函数实例化Select()内的对象。

您可以使用ToList()更改LINQ语句以执行查询,然后使用JObject将其投影到Select() ...

new JArray(
        (from e in db.HostedVoiceAAKeys
        where e.HostedVoiceAAID == aaid.HostedVoiceAAID)
            .ToList()
            .Select(h => new JObject(
                    new JProperty("id",e.OptionKey),
                    new JProperty("text",e.OptionGuid)))
            .ToArray()
     )

虽然正如L.B.的回答所示,创建自定义类将是这里的首选方法。