因此,我试图将一些数据反序列化为一个集合。 当我尝试反序列化包含json的文件的内容时遇到问题。
这就是我存储数据的方式。
WebItem = new WebsiteItemViewModel
{
Title = "Twitter Item",
Description = "Here is a long description that might be crossing the bounds but thats fine.",
Image = "../resources/twitter.png"
};
string resultJson2 = JsonConvert.SerializeObject(WebItem);
File.AppendAllText("Testfile", resultJson2);
这就是我尝试反序列化数据的方式:
private void OnLoadData_Click(object sender, RoutedEventArgs e)
{
string data = File.ReadAllText("Testfile");
var deserialize = JsonConvert.DeserializeObject<WebsiteItemViewModel>(data);
}
但是当我单击反序列化时,它将引发该错误
Newtonsoft.Json.JsonReaderException:'遇到其他文本 阅读完JSON内容后:{。路径'',第1行,位置 154。'
这就是json数据的样子。
{“ Title”:“ Facebook Item”,“ Description”:“此处为长描述 那可能越界,但是那是 很好。“,”图片“:” ../ resources / Facebook.png“} {”标题“:” Facebook 项目”,“描述”:“此处有一个很长的描述,可能会越过 范围但是那 很好。“,”图片“:” ../ resources / Facebook.png“} {”标题“:” Twitter 项目”,“描述”:“此处有一个很长的描述,可能会越过 范围但是那 很好。“,”图片“:” ../ resources / twitter.png“} {”标题“:” Facebook 项目”,“描述”:“此处有一个很长的描述,可能会越过 范围但是那 很好。“,”图片“:” ../ resources / Facebook.png“} {”标题“:” Twitter 项目”,“描述”:“此处有一个很长的描述,可能会越过 范围但是那 很好。“,”图片“:” ../ resources / twitter.png“} {”标题“:” Twitter 项目”,“描述”:“此处有一个很长的描述,可能会越过 范围但是那 很好。“,”图片“:” ../ resources / twitter.png“} {”标题“:” Facebook 项目”,“描述”:“此处有一个很长的描述,可能会越过 范围但是那 很好。“,”图片“:” ../ resources / Facebook.png“} {”标题“:” Facebook 项目”,“描述”:“此处有一个很长的描述,可能会越过 范围但是那 很好。“,”图片“:” ../ resources / Facebook.png“} {”标题“:” Twitter 项目”,“描述”:“此处有一个很长的描述,可能会越过 范围但是那 很好。“,”图片“:” ../ resources / twitter.png“} {”标题“:” Facebook 项目”,“描述”:“此处有一个很长的描述,可能会越过 范围但是那 很好。“,”图片“:” ../ resources / Facebook.png“} {”标题“:” Twitter 项目”,“描述”:“此处有一个很长的描述,可能会越过 范围但是那 很好。“,”图片“:” ../ resources / twitter.png“} {”标题“:” Twitter 项目”,“描述”:“此处有一个很长的描述,可能会越过 范围但是那 很好。“,”图片“:” ../ resources / twitter.png“} {”标题“:” Facebook 项目”,“描述”:“此处有一个很长的描述,可能会越过 范围但是那 很好。“,”图片“:” ../ resources / Facebook.png“} {”标题“:” Facebook 项目”,“描述”:“此处有一个很长的描述,可能会越过 范围但是那 很好。“,”图片“:” ../ resources / Facebook.png“} {”标题“:” Facebook 项目”,“描述”:“此处有一个很长的描述,可能会越过 范围但是那 很好。“,”图片“:” ../ resources / Facebook.png“} {”标题“:” Twitter 项目”,“描述”:“此处有一个很长的描述,可能会越过 范围,但没关系。“,”图像“:” ../ resources / twitter.png“}
模型
[Serializable]
public class ClassName...
[JsonProperty("Title")]
public string Title
{
get { return _title; }
set
{
_title = value;
OnPropertyChanged("Title");
}
}
[JsonProperty("Description")]
public string Description
{
get { return _description; }
set
{
_description = value;
OnPropertyChanged("Description");
}
}
[JsonProperty("Image")]
public string Image
{
get { return _image; }
set
{
_image = value;
OnPropertyChanged("Image");
}
}
答案 0 :(得分:1)
我会通过一种方法将Object Json数据反序列化为Activity
收集对象。
List<WebsiteItemViewModel>
然后,您可以在集合中附加private List<WebsiteItemViewModel> readData()
{
string data = File.ReadAllText("Testfile");
return JsonConvert.DeserializeObject<List<WebsiteItemViewModel>>(data) ?? new List<WebsiteItemViewModel>();
}
类型WebsiteItemViewModel
新对象,并使用WebItem
覆盖文件以确保JSON数据是最新的。
WriteAllText
注意
使用var list = readData();
WebsiteItemViewModel WebItem = new WebsiteItemViewModel
{
Title = "Twitter Item",
Description = "Here is a long description that might be crossing the bounds but thats fine.",
Image = "../resources/twitter.png"
};
list.Add(WebItem);
string resultJson2 = JsonConvert.SerializeObject(list);
File.WriteAllText("Testfile", resultJson2);
代替WriteAllText
,因为AppendAllText
将在末尾附加JSON数据。
AppendAllText
将覆盖文件,以使JSON成为有效的数组字符串。
答案 1 :(得分:0)
由于您尚未将所有对象序列化为对象数组,据我在您的json文件中所见,您丢失了左括号和右括号。换句话说,您尚未构建适当的json文件。