我想从DataContractJsonSerializer
获取更多信息。
当我反序列化对象时:
var deserializer = new DataContractJsonSerializer(toType);
return deserializer.ReadObject(stream);
如果在json中添加了一些无用的属性,我不会收到任何错误。 我没有检索任何可用的信息,比如我们正在讨论的特定类型的缺失属性。 还有其他一些事情。
你们知道如何检索这些信息吗?
答案 0 :(得分:1)
如果是我,我会以这种方式反序列化
var json = JsonConvert.DeserializeObject<ExpandoObject>(sampleJson);
这使您可以访问所有可以使用
查询的数据json.ContainsKey('foo');
查看属性是否存在。
或者
json.GetEnumerator()
允许您遍历所有元素。
答案 1 :(得分:1)
<强>更新强>
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。它具有以下功能:
如果你的json具有不同的类属性,它会引发异常。
您可以通过NuGet轻松安装。