DataContractJsonSerializer检索信息

时间:2016-02-04 13:37:05

标签: c#

我想从DataContractJsonSerializer获取更多信息。

当我反序列化对象时:

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

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

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

2 个答案:

答案 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。它具有以下功能:

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

如果你的json具有不同的类属性,它会引发异常。

您可以通过NuGet轻松安装。