【问题标题】:Convert IQueryable generic to JSON将 IQueryable 泛型转换为 JSON
【发布时间】:2012-08-21 06:34:41
【问题描述】:

我正在通过以下方式进行投影:

var query = from book in books
    select new
    {
        label = book.Title,
        value = book.ID
    };

在我的剃须刀页面中我需要使用:

    var booksArray = [{
        @(json)
    }];

使得结果数组看起来像:

label: 'c++',
value: 'c++'
}, {
label: 'java',
value: 'java'
}, {
label: 'php',
value: 'php'
}, {
label: 'coldfusion',
value: 'coldfusion'
}

我已经通过几种不同的方法非常接近 - 我可以获得一个在服务器端看起来正确的字符串,但是当呈现到页面本身时,所有 ' 标记都变为 '

但专注于通过 JSON.net 实现这一目标......

最可能的方法似乎应该是:

var json = JsonConvert.ToString(query);

但那会折腾:

Unsupported type: System.Linq.Enumerable+WhereSelectListIterator`2[Project.Entity.Book,<>f__AnonymousType3`2[System.String,System.Int32]]. Use the JsonSerializer class to get the object's JSON representation.

什么是正确的 JSON.net 语法?

谢谢

【问题讨论】:

    标签: asp.net-mvc json razor json.net


    【解决方案1】:

    您需要.ToArray()Html.Raw() 的组合

    ToArray() 评估查询并使JsonConvert 开心

    var query = from book in books
        select new
        {
            label = book.Title,
            value = book.ID
        };
    
    var json = JsonConvert.SerializeObject(query.ToArray());
    

    注意:如果你想序列化复杂类型,你需要使用JsonConvert.SerializeObjectJsonConvert.ToString 用于转换 bool、guid、int、uri 等简单类型。

    并且在您看来Html.Raw 不会对 JSON 进行 html 编码:

    var booksArray = @(Html.Raw(json))
    

    【讨论】:

    • 在“var json”行中遇到运行时错误。不支持的类型:f__AnonymousType2`2[System.String,System.String][]。我已经为这两个元素进行了显式的“ToString()”转换(ID 实际上是一个整数),但报告的错误没有改变。多谢
    • @justSteve 感谢您的反馈,您是对的。我已经更新了我的答案。
    • 做到了 - 非常感谢。
    猜你喜欢
    • 2012-11-15
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    相关资源
    最近更新 更多