DataContractJsonSerializer 检索信息
本文关键字:信息 检索 DataContractJsonSerializer | 更新日期: 2023-09-27 18:33:10
我想从DataContractJsonSerializer
中获取更多信息。
当我反序列化一个对象时:
var deserializer = new DataContractJsonSerializer(toType);
return deserializer.ReadObject(stream);
如果在 json 中添加了一些无用的属性,我不会收到任何错误。我不检索任何可用信息,例如我们正在谈论的特定类型的丢失属性。还有其他一些事情。
你们知道我如何检索这些信息吗?
更新
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轻松安装它。
如果是我,我会这样反序列化
var json = JsonConvert.DeserializeObject<ExpandoObject>(sampleJson);
这使您可以访问可以使用的所有数据进行查询
json.ContainsKey('foo');
查看属性是否存在。
或
json.GetEnumerator()
允许您遍历所有元素。