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。
我解决了这些在线工具:
- 要检查Json结构是否OKAY: http : //jsonlint.com/
- 从我的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=xml
replace&mode=json
来修复它。