【发布时间】:2017-03-08 17:15:22
【问题描述】:
我正在尝试序列化我的字典,看起来像这样:
private Dictionary<MetaDataKey, User> _dictionary;
MetaDataKey 和 Users 类如下所示:
internal class User
{
public string UserName { get; set; }
public string UserPassword { get; set; }
public List<Account> Accounts { get; set; }
}
internal class Account
{
public string Subject { get; set; }
public string AccName { get; set; }
public string AccPass { get; set; }
public List<string> Notes { get; set; }
}
internal class MetaDataKey
{
public string Name { get; set; }
public string Password { get; set; }
}
我正在尝试将字典保存\加载到\来自这样的 json 文件:
private void DictionaryInit()
{
//gets the dictionary file if exists, create an empty one if not.
string path = Directory.GetCurrentDirectory() + "\\dic.json";
if (!File.Exists(path))
{
_dictionary = new Dictionary<MetaDataKey, User>();
return;
}
using (StreamReader r = new StreamReader(path))
{
string json = r.ReadToEnd();
_dictionary = JsonConvert.DeserializeObject<Dictionary<MetaDataKey, User>>(json);
}
}
public void DictionarySave()
{
//save the dictionary into dic.json file
string path = Directory.GetCurrentDirectory() + "\\dic.json";
string json = JsonConvert.SerializeObject(_dictionary);
File.WriteAllText(path, json);
}
当我将新记录加载到字典并尝试保存时,我得到:
{"WpfApplication2.MetaDataKey":{"UserName":"Enter Name","UserPassword":"Enter Password","Accounts":null}}
代替:
{"WpfApplication2.MetaDataKey":{"Name":"Enter Name","Password":"Enter Password"},"WpfApplication2.User":{"UserName":"Enter Name","UserPassword":"Enter Password","Accounts":null}}
如您所知,我正在 MetaDataKey 类中获取用户字段。 即使我手动修复它,我仍然会遇到异常:
An exception of type 'Newtonsoft.Json.JsonSerializationException' occurred in Newtonsoft.Json.dll but was not handled in user code
当我尝试加载非空文件时。 总之,有2个问题: 1. 错误的 json 保存。 2. json 加载错误
【问题讨论】:
-
我们可以看一个json文件包含的例子吗?
-
第一次它是空的,在我添加一条记录后,我在文件中得到了这个:{"WpfApplication2.MetaDataKey":{"UserName":"Enter Name","UserPassword":"Enter Password","Accounts":null}}(和我发布的一样)
-
看起来 Newtonsoft JSON 序列化程序使用键对象的 ToString 表示作为键。默认的 ToString 表示是完整的类名 (= namespace.classname)。
标签: c# json dictionary serialization deserialization