Вы не объяснили, что такое Response.AsJson
и как оно реализовано, но если оно использует JavaScriptSerializer
, вы получите следующее исключение:
Необработанное исключение: System.ArgumentException: Тип
«System.Collections.Generic. Dictionary`2 [[System.Int32, mscorlib,
Версия = 4.0.0.0, Культура = нейтральная,
PublicKeyToken = b77a5c561934e089], [ChatData, Test, Version = 1.0.0.0,
Культура = нейтральная, PublicKeyToken = null]] 'не поддерживается для
сериализация / десериализация словаря, ключи должны быть строками или
объекты.
, что довольно очевидно. Вы не можете использовать целые числа в качестве ключей, если вы намерены JSON сериализовать эту структуру. Кроме того, поскольку ваш класс ChatData
больше не имеет конструктора по умолчанию / без параметров, вы не сможете десериализовать строку JSON обратно в этот класс (но я думаю, вам это пока не нужно).
Таким образом, одним из возможных решений вашей проблемы будет использование:
Dictionary<string, ChatData> data = new Dictionary<string, ChatData>();
data.Add("1", new ChatData("bob", "hey guys"));
data.Add("2", new ChatData("david", "hey you"));
data.Add("3", new ChatData("jill", "wait what"));
Теперь, конечно, это сказанное и смотрящее на javascript, который вы закомментировали, и на то, что вы собираетесь делать, как я уже объяснил вам в вашем предыдущем вопросе , словари не сериализуются как массивы javascript, поэтому вы не может зациклить их.
Короче говоря, определите класс:
public class ChatData
{
public string Username { get; set; }
public string Message { get; set; }
public DateTime TimeStamp { get; set; }
}
и затем заполните массив этого класса:
var data = new[]
{
new ChatData { Username = "bob", Message = "hey guys" },
new ChatData { Username = "david", Message = "hey you" },
new ChatData { Username = "jill", Message = "wait what" },
};
return Response.AsJson(data);
и, наконец, потребляют:
$.getJSON(dataSource, { req: 'getchat' }, function (data) {
$.each(data, function(index, element) {
// do something with element.Username and element.Message here, like
$('body').append(
$('<div/>', {
html: 'user: ' + element.Username + ', message:' + element.Message
})
);
});
});