Ответ 1
Ваш JSON представляет массив объектов CPacket
, а не только один объект. Вам нужно десериализовать в список.
List<CPacket> list = JsonConvert.DeserializeObject<List<CPacket>>(strPostData);
У меня есть строка:
[
{
"key": "key1",
"value": "{'Time':'15:18:42','Data':'15:18:42'}",
"duration": 5
},
{
"key": "key1",
"value": "{'Time':'15:18:42','Data':'15:18:42'}",
"duration": 5
}
]
Мой класс в моделях:
public class CPacket
{
public string key { get; set; }
public string value { get; set; }
public int duration { get; set; }
}
Я использую Json.Net, я хочу преобразовать строку ниже в Json Oject.
CPacket c = JsonConvert.DeserializeObject<CPacket>(strPostData);
Но это ошибка:
Исключение типа "Newtonsoft.Json.JsonSerializationException" произошло в Newtonsoft.Json.dll, но не было обработано в коде пользователя
Дополнительная информация: Невозможно десериализовать текущий массив JSON (например, [1,2,3]) в тип "QuoteAPI.Models.CPacket", потому что для этого требуется объект JSON (например, { "name": "value" }) для десериализации.
Ваш JSON представляет массив объектов CPacket
, а не только один объект. Вам нужно десериализовать в список.
List<CPacket> list = JsonConvert.DeserializeObject<List<CPacket>>(strPostData);
{
var url = "http://jsonplaceholder.typicode.com/posts";
var webClient = new WebClient();
var responseStr = webClient.DownloadString(url);
//JObject jResponse = JObject.Parse(responseStr);
JArray jArray = JArray.Parse(responseStr);
List<User> userList = new List<User>();
foreach (var item in jArray)
{
User user = new User();
user.UserID = Convert.ToInt32(item["userId"]);
user.ID = Convert.ToInt32(item["id"]);
user.Title = Convert.ToString(item["title"]);
user.Body = Convert.ToString(item["body"]);
userList.Add(user);
}
public partial class Search : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string url = "http://jsonplaceholder.typicode.com/posts";
var webClient = new WebClient();
var responseStr = webClient.DownloadString(url);
JArray jArray = JArray.Parse(responseStr);
List<Class1> userList = new List<Class1>();
foreach (var item in jArray)
{
Class1 user = new Class1();
user.userId = Convert.ToInt32(item["userId"]);
user.id = Convert.ToInt32(item["id"]);
user.title = Convert.ToString(item["title"]);
user.body = Convert.ToString(item["body"]);
userList.Add(user);
}
Repeater1.DataSource = userList;
Repeater1.DataBind();
var myClass = _download_serialized_json_data<List<Class1>>(url);
WebRequest request = WebRequest.Create(url);
WebResponse ws = request.GetResponse();
//Stream stream1 = response.GetResponseStream();
//StreamReader sr = new StreamReader(stream1);
//string strsb = sr.ReadToEnd();
//object objResponse = JsonConvert.DeserializeObject(strsb, JSONResponseType);
DataContractJsonSerializer jsonSerializer =
new DataContractJsonSerializer(typeof(List<Class1>));
object objResponse = jsonSerializer.ReadObject(ws.GetResponseStream());
List<Class1> jsonResponse
= objResponse as List<Class1>;
List<Class1> photos = (List<Class1>)jsonSerializer.ReadObject(ws.GetResponseStream());
}
private static T _download_serialized_json_data<T>(string url) where T : new()
{
using (var w = new WebClient())
{
var json_data = string.Empty;
// attempt to download JSON data as a string
try
{
json_data = w.DownloadString(url);
}
catch (Exception) { }
// if string with JSON data is not empty, deserialize it to class and return its instance
return !string.IsNullOrEmpty(json_data) ? JsonConvert.DeserializeObject<T>(json_data) : new T();
}
}
}
}