Razor ビューで JSON を直接出力しようとしています。シリアル化されるオブジェクトはIEnumerable<ItemDto>
(以下の定義を参照) です。から返される同一の JSON にシリアル化したいですApiController
。これが私が試したことです:
- を使用する
@Json.Encode(theValue)
と、 が無視されるDataMember
ため、プロパティの名前が間違っています (最初の文字が大文字)。 - を使用
DataContractJsonSerializer
(およびキャスト)すると、 asが出力IEnumerable<ItemDto>
されますが、ApiController は正しく出力されます。IList<ItemDto>
ImageDto.Sizes
[{ Key: 'foo', Value: <object> }]
{ 'foo': <object> }
ここに私のクラスがあります:
[DataContract]
public class ItemDto
{
[DataMember(Name = "id")]
public int Id { get; set; }
[DataMember(Name = "title")]
public string Title { get; set; }
[DataMember(Name = "image")]
public ImageDto Image { get; set; }
[DataMember(Name = "price")]
public decimal Price { get; set; }
}
[DataContract]
public class ImageDto
{
[DataMember(Name = "id")]
public Guid Id { get; set; }
[DataMember(Name = "sizes")]
public Dictionary<String, ImageSizeDto> Sizes { get; set; }
}
[DataContract]
public class ImageSizeDto
{
[DataMember(Name = "url")]
public string Url { get; set; }
[DataMember(Name = "w")]
public int Width { get; set; }
[DataMember(Name = "h")]
public int Height { get; set; }
}
GET
目的は、ほぼすべてのページで必要なデータの個別の要求を回避することです。
必要な JSON:
[{"id":6,
"title":"Foo bar baz",
"image":
{"id":"fb2a3b4a-5ae5-4d9d-baff-72e107aa6e9c",
"sizes":
{"Original": {"url":"http://example.com/a", "w":-1, "h":-1},
"Thumbnail": {"url":"http://example.com/b", "w":130, "h":73},
"LargeThumbnail": {"url":"http://example.com/c", "w":220,"h":124},
"Popup": {"url":"http://example.com/d", "w":256, "h":256},
"FullWidth": {"url":"http://example.com/e", "w":930, "h":524}}},
"price":79}]