An unexpected character occurred after parsing the value: 6. Path [0]

I am parsing a JSON object from a file using the Newtonsoft library (Json.Net). I have checked JSON at jsonlint.com and it is valid.

But when I say:

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

      

I am getting the error:

An unexpected character occurred after parsing the value: 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 is my real 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 could be wrong?

+3


source to share


2 answers


It looks like an encoding problem. I'm sure 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 explains why there are all kinds of characters in the middle of your JSON value \0

, and why Json.Net is having trouble parsing it. Try specifying the encoding on initialization StreamReader

:

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

      



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

+3


source


Make sure the flow path is correctly set. Maybe add the line: path.Position = 0;

before the callsr.ReadToEndAsync();



0


source







All Articles