7

我正在通过以下方式制作投影:

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 语法?

谢谢

4

1 回答 1

12

您需要.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.SerializeObject如果要序列化复杂类型,则需要使用。JsonConvert.ToString用于转换简单类型,如 bool、guid、int、uri 等。

在您看来Html.Raw,不要对 JSON 进行 html 编码:

var booksArray = @(Html.Raw(json))
于 2012-08-26T14:01:08.403 回答