2017-05-10 14 views
3

Newtonsoftライブラリ(Json.Net)を使用してファイルからJSONオブジェクトを解析しています。私はjsonlint.comでJSONを検証しましたが、それは有効です。値を解析した後、予期しない文字が発生しました:6. Path '[0]

しかし、私は言う:

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

が、私はエラーを取得する:

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

だから私はjson = await sr.ReadToEndAsync();にブレークポイントを入れて示したJSON値は次のとおりです。

"\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"

ここに私の実際のJSONがあります:

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

ここに私の連絡先のクラスです:

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)); 
     } 
    } 
} 

誰が間違っているかもしれないものを知っていますか?

+4

あなたは 'Contact'クラスを含めることができますか? – degant

+0

連絡先クラスのような詳細をあなたのサンプルに入れてください –

答えて

3

これはエンコードの問題のようです。私はあなたのファイルがUTF-16エンコーディングで保存されていると賭けていますが、UTF-8として読み込んでいます。 (StreamReaderのデフォルトのエンコーディングはUTF-8です)。これは、読んでいるJSON値の真ん中にすべての種類の\0文字がある理由、およびJson.Netが解析に問題がある理由を説明します。あなたがStreamReaderを初期化する際にエンコーディングを指定してみてください。

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

はまた、あなたのJSONファイルはUTF-8エンコーディングで保存されていることを確認します。

+0

ありがとうBrianそれはエンコーディングの問題でした – nikhil

+0

問題はありません。お役に立てて嬉しいです。 –

0

ストリームのパスの位置が適切に設定されていることを確認します。おそらく、sr.ReadToEndAsync();への呼び出しの前にpath.Position = 0;という行を追加してください。

関連する問題