C#DataContractJsonSerializer如果缺少成员,则ReadObject不会抛出错误

时间:2017-08-07 12:57:28

标签: c# json serialization datacontractjsonserializer

我有一个类似

的用户类
public class User
{
  public string UserName {get;set;}
  public string Application {get;set;}
}

现在,我正在使用它

var jsonSerializer = new DataContractJsonSerializer(typeof(User));
var objApp = (User)jsonSerializer.ReadObject(new MemoryStream(Encoding.Unicode.GetBytes(JsonInput)));

但是我的JSON JsonInput并不包含这两个值,例如JSON中没有Application。这仍然仅使用UserName序列化。 上面的JSON和类是一个例子,我有很多成员可以单独检查它们! 我想确保,JSON包含该类的所有成员,如果没有,则抛出错误。

但我似乎无法找到方法。我在这里缺少什么?

1 个答案:

答案 0 :(得分:2)

如果您使用Newtonsoft(可以使用 Install-Package Newtonsoft.Json 安装) - 您可以设置设置的 MissingMemberHandling 属性;

    JsonSerializerSettings settings = new JsonSerializerSettings();
    settings.MissingMemberHandling = MissingMemberHandling.Error;

然后传递它;

    var userObj = JsonConvert.DeserializeObject<User>(jsonInput, settings);

如果必须改为使用Datacontract,则可以使用必需的属性修饰User对象;

 [DataMember(IsRequired=true)]
 public string? RequiredProperty { get; set; }