parsing值时遇到意外的字符

目前我有一些问题。 我使用C#与Json.NET。 问题是我总是得到

{“parsing值时遇到的意外字符:e。path”,第0行,位置0.“}

所以他们使用json.net的方式如下。 我有一个应该保存的类。 这个类看起来像这样:

public class stats { public string time { get; set; } public string value { get; set; } } public class ViewerStatsFormat { public List<stats> viewerstats { get; set; } public String version { get; set; } public ViewerStatsFormat(bool chk) { this.viewerstats = new List<stats>(); } } 

这个类的一个对象将被填充和保存:

  File.WriteAllText(tmpfile, JsonConvert.SerializeObject(current), Encoding.UTF8); 

保存部分工作正常,文件存在并被填充。 之后,文件将被读回到类与:

  try { ViewerStatsFormat current = JsonConvert.DeserializeObject<ViewerStatsFormat>(tmpfile); //otherstuff } catch(Exception ex) { //error loging stuff } 

现在在当前=线来的例外:

{“parsing值时遇到的意外字符:e。path”,第0行,位置0.“}

我不知道这是为什么。 json文件如下 – > 点击我的JSON链接

有没有人有任何想法?

可能你没有把JSON传递给DeserializeObject

它看起来像从File.WriteAllText(tmpfile,...该types的tmpfile是包含文件的path的string JsonConvert.DeserializeObject需要JSON值,而不是文件path – 所以它不能尝试转换类似@"c:\temp\fooo" – 这显然不是JSON。

我解决了这些在线工具:

  1. 要检查Json结构是否OKAY: http : //jsonlint.com/
  2. 从我的Json结构genarate我的对象类: http ://json2csharp.com/

简单的代码:

 RootObject rootObj= JsonConvert.DeserializeObject<RootObject>(File.ReadAllText(pathFile)); 

我在Xamarin.Android解决scheme中遇到了同样的错误。

我validation了我的JSON是正确的,并且注意到这个错误只在我作为Release版本运行应用程序时出现。

事实certificate,链接器是从Newtonsoft.JSON中删除一个库,导致JSON被错误地parsing。

我通过将Newtonsoft.Json添加到Android Buildconfiguration中的Ignore程序集设置(下面的屏幕快照)

JSONparsing代码

 static readonly JsonSerializer _serializer = new JsonSerializer(); static readonly HttpClient _client = new HttpClient(); static async Task<T> GetDataObjectFromAPI<T>(string apiUrl) { using (var stream = await _client.GetStreamAsync(apiUrl).ConfigureAwait(false)) using (var reader = new StreamReader(stream)) using (var json = new JsonTextReader(reader)) { if (json == null) return default(T); return _serializer.Deserialize<T>(json); } } 

Visual Studio Mac截图

在这里输入图像说明

Visual Studio截图

在这里输入图像说明

假设这是你的json

 { "date":"11/05/2016", "venue": "{\"ID\":12,\"CITY\":Delhi}" } 

如果你又想要反序列化场地,请修改json如下

 { "date":"11/05/2016", "venue": "{\"ID\":\"12\",\"CITY\":\"Delhi\"}" } 

然后尝试通过考虑场地的价值来反序列化到相应的课程

如果您正在使用url下载数据…可能需要使用

var result = client.DownloadData(url);

当我遇到类似的问题时,我通过在请求中用&mode=xmlreplace&mode=json来修复它。