2017-10-03 1 views
0

J'ai une table dans la base de données MySQL qui contient une colonne de type de données JSON. Est-il possible de récupérer les données JSON stockées dans cette colonne et mapper à ma classe C# en utilisant Dapper? Voici un exemple de JSON sur la façon dont les données sont stockées dans la colonne.Comment mapper une colonne MySQL JSON avec Dapper

[ 
     { 
      "ServerName": "", 
      "Priority": 1, 
      "FilesystemBasePath": "", 
      "IsAvailable": 1, 
      "ApplicationDocumentType": "" 
     }, 
     { 
      "ServerName": "", 
      "Priority": 2, 
      "FilesystemBasePath": "", 
      "IsAvailable": 1, 
      "ApplicationDocumentType": "" 
     } 
] 

Je veux que les données soient mises en correspondance avec un type List<MyObject> en C#.

Répondre

0

Vous enregistrez un ITypeHandler pour List<MyObject>, ou quel que soit le type de propriété.

public class MyClass 
{ 
    public List<MyObject> MyObjects {get; set; 
} 

public class JsonTypeHandler: SqlMapper.ITypeHandler 
{ 
    public void SetValue(IDbDataParameter parameter, object value) 
    { 
     parameter.Value = JsonConvert.SerializeObject(value); 
    } 

    public object Parse(Type destinationType, object value) 
    { 
     return JsonConvert.DeserializeObject(value as string, destinationType); 
    } 
} 

SqlMapper.AddTypeHandler(typeof(List<MyObject>),new JsonTypeHandler()); 

Après que si vous avez un nom de colonne qui correspond à une propriété de type List<MyObject> il sera publié en feuilleton et désérialisée correctement.