DataContractJsonSerializer 检索信息

本文关键字:信息 检索 DataContractJsonSerializer | 更新日期: 2023-09-27 18:33:10

我想从DataContractJsonSerializer中获取更多信息。

当我反序列化一个对象时:

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

如果在 json 中添加了一些无用的属性,我不会收到任何错误。我不检索任何可用信息,例如我们正在谈论的特定类型的丢失属性。还有其他一些事情。

你们知道我如何检索这些信息吗?

DataContractJsonSerializer 检索信息

更新

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()

允许您遍历所有元素。