[英]Deserialize json with arrays with newtonsoft
我正在嘗試使用C#中的newtosoft json反序列化以下json對象:
{
"address": "address",
"id": 1,
"latitude": 46.0757062,
"longitude": 18.1975697,
"name": "store name",
"openingHours": [
{
"closeing": "01:00:00",
"opening": "11:00:00",
"weekday": 1
}
]
}
我的課看起來像這樣:
[PrimaryKey, JsonProperty("id")]
public int Id { get; }
[JsonProperty("name"), Column("name")]
public string Name { get; }
[JsonProperty("latitude"), Column("latitude")]
public double Latitude { get; }
[JsonProperty("longitude"), Column("longitude")]
public double Longitude { get; }
[JsonProperty("openingHours"), Ignore]
public List<OpeningHours> Openinghours { get; set; }
OpeningHours類別:
public class OpeningHours
{
[JsonProperty("weekday")]
public int Day { get; set; }
[JsonProperty("opening")]
public TimeSpan Open { get; set; }
[JsonProperty("closeing")]
public TimeSpan Close { get; set; }
}
這是嘗試反序列化的方式:
var result = JsonConvert.DeserializeObject<T>(json); //<-- this one should be the correct
var result = JsonConvert.DeserializeObject<T[]>(json);
var result = JsonConvert.DeserializeObject<List<T>>(json);
每當我得到這樣的錯誤:
Newtonsoft.Json.JsonSerializationException:無法將當前JSON數組(例如[1,2,3])反序列化為類型'System.Collections.Generic.Dictionary`2 [System.String,xMarksThePub.Model.OpeningHours]',因為該類型需要JSON對象(例如{“ name”:“ value”})正確反序列化。 要解決此錯誤,可以將JSON更改為JSON對象(例如{“ name”:“ value”}),也可以將反序列化類型更改為數組,或者將實現集合接口的類型(例如ICollection,IList)更改為List,例如List從JSON數組反序列化。 還可以將JsonArrayAttribute添加到類型中,以強制其從JSON數組反序列化。 路徑“ openingHours”,第1行,位置137。
Pub是我班的名字。
我不知道我在做什么錯。
你的JSON不正確,因為你有額外的,
在它。 試試這個:
{
"address": "address",
"id": 1,
"latitude": 46.0757062,
"longitude": 18.1975697,
"name": "store name",
"openingHours": [{
"closeing": "01:00:00",
"opening": "11:00:00",
"weekday": 1
}]
}
可以在我的機器上正常工作。 Windows 10上的C#/。Net v4.7.1。Newtonsoft.Json v11.0.2。
我唯一要做的更改是讓您get
/ set
類的屬性,而不只是get
。 否則,反序列化器在重新補充水分時無法為其分配值。
using System;
using System.Collections.Generic;
using Newtonsoft.Json;
namespace ConsoleApp6
{
class Program
{
const string json = @"
{
""address"": ""address"",
""id"": 1,
""latitude"": 46.0757062,
""longitude"": 18.1975697,
""name"": ""store name"",
""openingHours"":
[
{ ""closeing"": ""01:00:00"", ""opening"": ""11:00:00"", ""weekday"": 1 }
]
}
";
static void Main( string[] args )
{
Pub rehydrated;
try
{
rehydrated = JsonConvert.DeserializeObject<Pub>( json );
}
catch ( Exception e )
{
Console.WriteLine( e.ToString() );
}
return;
}
public class Pub
{
[JsonProperty( "id" )]
public int Id { get; set; }
[JsonProperty( "name" )]
public string Name { get; set; }
[JsonProperty( "latitude" )]
public double Latitude { get; set; }
[JsonProperty( "longitude" )]
public double Longitude { get; set; }
[JsonProperty( "openingHours" )]
public List<OpeningHours> Openinghours { get; set; }
public class OpeningHours
{
[JsonProperty( "weekday" )]
public int Day { get; set; }
[JsonProperty( "opening" )]
public TimeSpan Open { get; set; }
[JsonProperty( "closeing" )]
public TimeSpan Close { get; set; }
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.