After parsing a value an unexpected character was encountered: 6. Path '[0]

16,744

This looks like an encoding issue. I'm betting your file is saved in UTF-16 encoding, but you are reading it as UTF-8. (UTF-8 is the default encoding for StreamReader.) This would explain why there are all kinds of \0 characters in the middle of your read JSON value, and why Json.Net is having trouble parsing it. Try specifying the encoding when you initialize the StreamReader:

    using (StreamReader sr = new StreamReader(path, Encoding.Unicode, true))
    {
        ...
    }

Alternatively, make sure your JSON file is saved with UTF-8 encoding.

Share:
16,744
nikhil
Author by

nikhil

Updated on June 08, 2022

Comments

  • nikhil
    nikhil almost 2 years

    I am parsing a JSON object from a file using Newtonsoft library (Json.Net). I validated the JSON at jsonlint.com, and it's valid.

    But when I say:

    using (StreamReader sr = new StreamReader(path))
    {
        json = await sr.ReadToEndAsync();
    }
    ContactsCollection = JsonConvert.DeserializeObject<List<Contact>>(json); //error
    

    I get an error:

    After parsing a value an unexpected character was encountered: 6. Path '[0]

    So I put a breakpoint at json = await sr.ReadToEndAsync(); and the JSON value shown is:

    "\0{\0\"\0F\0i\0r\0s\0t\0N\0a\0m\0e\0\"\0:\0\"\0N\0i\0k\0h\0\"\0,\0\"\0L\0a\0s\0t\0N\0a\0m\0e\0\"\0:\0\"\0A\0N\0S\0\"\0,\0\"\0D\0a\0t\0e\0O\0f\0B\0i\0r\0t\0h\0\"\0:\0\"\01\02\0/\07\0/\01\09\08\09\0 \01\02\0:\00\00\0:\00\00\0 \0A\0M\0\"\0,\0\"\0W\0e\0i\0g\0h\0t\0\"\0:\01\06\08\0.\00\0,\0\"\0H\0e\0i\0g\0h\0t\0\"\0:\01\06\08\0.\00\0,\0\"\0P\0h\0o\0n\0e\0\"\0:\0\"\0(\08\00\05\0)\0 \02\05\01\0-\01\00\01\05\0\"\0}\0]\0"

    Here's my actual JSON:

    [{
      "FirstName":"Nikh",
      "LastName":"ANS",
      "DateOfBirth":"12/7/1989 12:00:00 AM",
      "Weight":168.0,
      "Height":168.0,
      "Phone":"(805) 251-1015"
    }]
    

    Here's my Contact class:

    public class Contact : INotifyPropertyChanged
    {
        private string _firstName;
        public string FirstName
        {
            get { return _firstName; }
            set
            {
                _firstName = value;
                NotifyPropertyChanged("FirstName");
            }
        }
    
        private string _lastName;
        public string LastName
        {
            get { return _lastName; }
            set
            {
                _lastName = value;
                NotifyPropertyChanged("LastName");
            }
        }
    
        private string _dateOfBirth;
        public string DateOfBirth
        {
            get { return _dateOfBirth; }
            set
            {
                _dateOfBirth = value;
                NotifyPropertyChanged("DateOfBirth");
            }
        }
    
        private double _weight;
        public double Weight
        {
            get { return _weight; }
            set
            {
                _weight = value;
                NotifyPropertyChanged("Weight");
            }
        }
    
        private double _height;
        public double Height
        {
            get { return _height; }
            set
            {
                _height = value;
                NotifyPropertyChanged("Height");
            }
        }
    
        private string _phone;
        public string Phone
        {
            get { return _phone; }
            set
            {
                _phone = value;
                NotifyPropertyChanged("Phone");
            }
        }
    
        public event PropertyChangedEventHandler PropertyChanged;
        private void NotifyPropertyChanged(String info)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(info));
            }
        }
    }
    

    Does anyone know what might be going wrong?