反序列化json引发“遇到其他文本”错误

时间:2018-08-19 19:38:06

标签: c# .net json

因此,我试图将一些数据反序列化为一个集合。 当我尝试反序列化包含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");
            }
        }

2 个答案:

答案 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文件。