将值转换为Json.net类型

时间:2017-04-19 21:48:44

标签: c# android json xamarin.android json.net

我使用Json.NET来存储我的应用程序的一些首选项,但是当我尝试从文件中获取值时,我发现了这个错误:

  

Newtonsoft.Json.JsonSerializationException:转换值时出错   “{”Kepp_Active“:1,”Speech_Words“:0}”输入'MyTestApp.Configs'。   路径'',第1行,第40位。

我的代码:

string jsonContent = File.ReadAllText(filePath);
var configJson = JsonConvert.DeserializeObject<Configs>(jsonContent,
          new JsonSerializerSettings
          {
            NullValueHandling = NullValueHandling.Ignore
          });  

我的配置课程:

public class Configs
{
    [JsonProperty("Kepp_Active")]
    public int KeepActive;

    [JsonProperty("Speech_Words")]
    public int Speech;
}

编辑1:

我的配置课程:

public class Configs
{
    [JsonProperty("Keep_Active")]
    public int KeepActive;

    [JsonProperty("Speech_Words")]
    public int Speech;
}

错误:

  

Newtonsoft.Json.JsonSerializationException:转换值时出错   “{”Keep_Active“:1,”Speech_Words“:0}”输入'Placar_Fodinha.Configs'。   路径'',第1行,第40位

编辑2:

商店代码:

Configs cfg = new Configs();
cfg.Speech = 0;
cfg.KeepActive = 1;
string configsJson = JsonConvert.SerializeObject(cfg);                
using (StreamWriter file = File.CreateText(filePath))
{
   JsonSerializer serializer = new JsonSerializer();
   serializer.Serialize(file, configsJson);
}

1 个答案:

答案 0 :(得分:0)

根据您的上次更新:您将“cfg”序列化两次。

首先在:

string configsJson = JsonConvert.SerializeObject(cfg); 

第二名:

serializer.Serialize(file, configsJson);

这就是为什么保存的JSON字符串如下所示:

  

“\”{\\ “KeepActive \\”:1,\\ “SpeechWords \\”:0} \ “”

如果删除此行:

string configsJson = JsonConvert.SerializeObject(cfg);

并将“cfg”添加到另一行:

serializer.Serialize(file,cfg);

响应将保存在您的文件中,如:

  

“{\” KeepActive \ “:1,\” SpeechWords \ “:0}”

你应该能够反序列化它。

保护JSON字符串的代码应如下所示:

Configs cfg = new Configs();

cfg.Speech = 0;
cfg.KeepActive = 1;

using (StreamWriter file = File.CreateText("myTestFile.txt"))
{

    JsonSerializer serializer = new JsonSerializer();
    serializer.Serialize(file, cfg);
}

图片:

使用您的代码:

enter image description here

使用新代码:

enter image description here