2015-09-04 2 views
0

Я пробовал использовать следующий код, но получал ошибку для входного параметра как строку.Невозможно десериализовать объект с помощью Newton Json

protected override object DeserializeCore(Type type, byte[] value) 
{ 
    using (var ms = new MemoryStream(value)) 
    using (var sr = new StreamReader(ms, Encoding.UTF8)) 
    { 
      var result = Newtonsoft.Json.JsonConvert.DeserializeObject(sr, type); 
      return result; 
    } 
} 

и я передал его как sr.ToString() получаю ошибку:

Неожиданный символ встречается при анализе значения: S. Путь '', строка 0, положение 0.

+3

вы должны получить строку из StreamReader и проверить, что в нем – wudzik

+0

получение компиляции только ошибка – Neo

+1

Этот код не является причиной этого исключения (которое является временем выполнения, а не временем компиляции), входным является. Покажите свои данные. Это недействительно JSON. – CodeCaster

ответ

1

Будет ли это не проще?

protected override object DeserializeCore(Type type, byte[] value) { 
     var str = System.Text.Encoding.UTF8.GetString(value); 
     return JsonConvert.DeserializeObject(str, type); 
    } 

(я не могу понять, почему вы используете потоки. Это связано с какой-то вопрос с кодировкой?)

1

попробовать это -

public class JsonObject 
{ 
    public object Value { get; set; } 
    public string Type { get; set; } 
} 

var s = "{'Value':{'something':'test'},'Type':'JsonData'}"; 
var o = DeserializeCore(typeof(JsonObject), Encoding.UTF8.GetBytes(s.ToCharArray())); 

должно работать нормально.

Смежные вопросы