2016-09-23 92 views
1

我具有以下JSON &類,Newtonsoft JSON模式忽略驗證對於反序列化

{ 「ID」:123, 「姓」: 「FNAME」, 「名字」: 「L-NAME」 }

public class Student 
{ 
    public int Id { get; set; } 

    [StringLength(4)] 
    public string FirstName { get; set; } 

    [StringLength(4)] 
    public string LastName { get; set; } 
} 

我想反序列化上面的JSON來創建一個學生類的實例。

var body = //above json as string; 

Student model = null; 

JSchemaGenerator generator = new JSchemaGenerator(); 
JSchema schema = generator.Generate(typeof(Student)); 

using (JsonTextReader reader = new JsonTextReader(new StringReader(body))) 
{ 
    using (JSchemaValidatingReader validatingReader = new JSchemaValidatingReader(reader) { Schema = schema }) 
    { 
     JsonSerializer serializer = new JsonSerializer(); 
     model = serializer.Deserialize(validatingReader, typeof(Student)); 
    } 
} 

這是拋出異常的字符串長度的驗證,有沒有辦法忽略所有的數據註釋驗證反序列化JSON的?

+2

爲什麼不直接刪除StringLength(4)如果你不想要嗎? – DaImTo

回答

3

您可以使用下面的代碼反序列化您的數據。在序列化之前,您正在驗證它是由於拋出錯誤。

var body ="{\"Id\":123,\"FirstName\":\"fNamesdcsdc\",\"LastName\":\"lName\"}"; 
      using (JsonTextReader reader = new JsonTextReader(new StringReader(body))) 
      { 
       JsonSerializer serializer = new JsonSerializer(); 
       var model = serializer.Deserialize(reader, typeof(Student)); 
      } 

enter image description here

1

另一種方法

  String json="{ \"Id\": 123, \"FirstName\": \"fName\", \"LastName\": \"lName\" }"; 

      JavaScriptSerializer serializer=new JavaScriptSerializer(); 
      Student student = serializer.Deserialize<Student>(json);