F#Newtonsoft.Json.JsonReaderException:解析值时遇到意外的字符:{

时间:2018-06-14 20:40:48

标签: parsing f# json.net

我有一个需要使用JSON.net 11.0.2序列化/反序列化的日志。我可以序列化它,但是当反序列化它失败时:

  

Newtonsoft.Json.JsonReaderException:遇到意外的字符   在解析值时:{。路径' [0] .data',第10行,第13位。

对象是

type LogRow = {
    log_id:int64
    source_id:int32
    source:string
    action:string
    data:string
    changeby:string
    version:int32
    timestamp:DateTime
}

,JSON是:

[
  {
    "log_id": -1,
    "source": "Auth",
    "source_id": -1,
    "action": "CreatedUser",
    "version": -2,
    "changeby": "admin",
    "timeStamp": "2018-06-14T20:33:52.835199Z",
    "data": {
  "user_id": -1,
  "username": "admin",
  "name": "Administrator",
  "email": "test@test.com",
  "password": "123",
  "role": "admin",
  "is_active": true
}
  }
]

我尝试使用对象反序列化,并作为字典,如:

JsonConvert.DeserializeObject<List<Dictionary<string, string>>>(json)

在这两种情况下都失败了。我在python中尝试相同的json并且正在工作,所以必须使用json.net吗?

P.D:DATA的内容不固定。这就是为什么我需要将它作为字符串,而不是作为对象。

2 个答案:

答案 0 :(得分:2)

要使数据成为字符串类型,它们的数据必须在引号中。 如果它不在引号中,它会假定它是另一个对象,并会尝试反序列化

答案 1 :(得分:2)

尝试

List<Dictionary<string, object>>

表示目标序列化类型 - JSON对象中的某些值不是字符串值。

此外,您是否尝试过使用

List<LogRow>

作为序列化类型?这是理想的,因为那是你的开始,假设我没有误解某些东西。