我正在尝试使用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])转换为type 'System.Collections.Generic.Dictionary`2 [System.String,xMarksThePub.Model.OpeningHours]' 因为该类型需要一个JSON对象(例如{“ name”:“ value”}) 正确反序列化。要解决此错误,请将JSON更改为 JSON对象(例如{“ name”:“ value”})或将反序列化类型更改为 实现集合接口的数组或类型(例如 ICollection,IList),例如可以从JSON反序列化的List 数组。还可以将JsonArrayAttribute添加到类型中以强制将其 从JSON数组反序列化。路径“ openingHours”,第1行,位置 137。
Pub是我班的名字。
我不知道我在做什么错。
答案 0 :(得分:0)
您的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
}]
}
答案 1 :(得分:0)
可以在我的机器上正常运行。 Windows 10上为C#/。Netv4.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; }
}
}
}
}