2013-04-22 11 views
7

Używam metadanych i JsonIgnore do usunięcia specjalnego pola z serializacji.jak dynamicznie jsonignore według autoryzacji użytkownika?

[Authorize(Roles = "admin")] 
public class UserController : ApiController 
{ 
    public IEnumerable<user> Get() 
    { 
     using (var mydb = new ModelContainer()) 
     { 
      return mydb.userSet.ToList(); 
     } 
    } 
} 

[MetadataType(typeof(user_Metadata))] 
public partial class user 
{ 
    private class user_Metadata 
    { 
     [JsonIgnore] 
     public virtual password { get; set; } 

     public virtual adminFile { get; set; } 
    } 
} 

W jaki sposób mogę dynamicznie sterować, które pole ma być serializowane lub nie. Dla niektórych rzeczy, takich jak

public partial class user 
{ 
    private class user_Metadata 
    { 
     [JsonIgnore] 
     public virtual password { get; set; } 
     [Roes == admin?JsonIgnore:JsonNotIgnore] //some thing like this 
     public virtual adminFile { get; set; } 
    } 
} 

Odpowiedz

0

JsonIgnore jest właściwością, która nie może być ustawiony dynamicznie. Ale możesz spróbować czegoś podobnego.

public partial class user 
{ 
    private class user_Metadata 
    { 
     [JsonIgnore] 
     public virtual password { get; set; } 

     //[Roes == admin?JsonIgnore:JsonNotIgnore] //something like this 
     public virtual adminFile 
     { 
      get 
      { 
       if(Roes == admin) 
        return NULL; 
       else 
        return adminFile; 
      } 
      set 
      { 
       if(Roes == admin) 
        value = NULL; 
       else 
        value = adminFile; 
      } 
     } 

    } 
} 

W ten sposób można zapisać wartość domyślną zamiast ratować aktualną wartość nieruchomości.

+1

dziękuję, to może dostać rzeczy do work.But Chciałbym drodze w Json.NET jak James –

Powiązane problemy