2016-02-04 3 views
0

Я хотел бы получить дополнительную информацию от DataContractJsonSerializer.DataContractJsonSerializer получение информации

Когда я десериализации объекта:

var deserializer = new DataContractJsonSerializer(toType); 
return deserializer.ReadObject(stream); 

Я не получить какие-либо ошибки, если некоторые бесполезные свойства, которые были добавлены в JSON. Я не извлекаю какую-либо полезную информацию, например, пропущенное свойство с конкретным типом, о котором мы говорим. И еще кое-что.

Вы, ребята, знаете, как я могу получить такую ​​информацию?

ответ

1

Update

public class Person 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

class Program 
{ 
    private static void Main(string[] args) 
    { 
     var json = "{'Id': 1, 'Salary': 100 }"; 

     var settings = new JsonSerializerSettings 
     { 
      Error = Error, 
      MissingMemberHandling = MissingMemberHandling.Error 
     }; 

     var person = JsonConvert.DeserializeObject<Person>(json, settings); 

     Console.ReadKey(); 
    } 

    private static void Error(object sender, Newtonsoft.Json.Serialization.ErrorEventArgs errorEventArgs) 
    { 
     Console.WriteLine(errorEventArgs.ErrorContext.Error.Message); 
     errorEventArgs.ErrorContext.Handled = true; 
    } 
} 

Конец обновления

Я думаю, что он не может делать то, что вам нужно. Я бы использовал Json.NET вместо DataContractJsonSerializer. Он имеет такие возможности:

http://www.newtonsoft.com/json/help/html/P_Newtonsoft_Json_JsonSerializerSettings_MissingMemberHandling.htm

Он бросает исключение, если ваш JSON имеет различные свойства этого класса.

Вы можете легко установить его через NuGet.

+0

Это кажется более подходящим, спасибо, но мне все еще нужно разобрать сообщение об исключении, чтобы получить мои данные. –

+0

@ M.Christopher Пожалуйста, уточните мое обновление, может быть, это помогает – berliner

+0

Привет, да, это то, что я реализовал, вы мне очень помогли! Спасибо –

1

Если бы это было, я бы десериализации этот путь

var json = JsonConvert.DeserializeObject<ExpandoObject>(sampleJson); 

Это дает вам доступ ко всем данным, которые вы можете запросить с помощью

json.ContainsKey('foo'); 

Чтобы увидеть, если свойство существует.

Или

json.GetEnumerator() 

Чтобы вам перебрать все элементы.

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