2013-08-14 4 views
1

Il s'agit de la sérialisation json. Voici la situation:Spécifiez les champs à sérialiser avec JSON

public class Book 
{  
    public string BookName { get; set; } 
    public decimal BookPrice { get; set; }  
    public string AuthorName { get; set; } 
    public int AuthorAge { get; set; } 
    public string AuthorCountry { get; set; } 
} 

public class MyBag{ 
    public string owner {get; set;} 
    public Book math_Book{get; set;} 

} 

livre a plusieurs champs, mais pas tous sont nécessaires pour serialiazed. par exemple, je veux seulement connaître le BookName et le BookPrice. et je voudrais spécifier les noms des champs et personnaliser jsonPropertyAttribute. Tout comme ceci:

public class MyBag{ 
    public string owner {get; set;} 
    [JsonProperty(serializedFields("BookName", "BookPrice"))] 
    public Book math_Book{get; set;} 
} 

Est-ce que JSON a la particularité de personnaliser JsonPropertyAttribute? ou comment puis-je faire pour que cela fonctionne?

Depuis que je ne trouve pas comment créer JsonPropertyAttribute personnaliser, je crée customizeAttribute pour objet Csharp, comme ceci:

public class SerializedFieldsAttribute : Attribute 
{ 
    private IList<string> _serializedFields = new List<string>(); 
    public SerializedFieldsAttribute(string[] fields) 
    { 
     _serializedFields = fields; 
    } 

    public IList<string> GetFields() 
    { 
     return _serializedFields; 
    } 

} 

public class MyBag 
{ 
    public String Owner { get; set; } 
    [SerializedFieldsAttribute(new string[] { "BookName", "BookPrice" })] 
    public Book MyBook { get; set; } 
} 

maintenant je peux obtenir le SerializedFieldsAttribute, mais comment puis-je faire pour

var book = new Book 
      { 
       BookName = "Yu Wen", 
       BookPrice = 56, 
       AuthorName = "Li QingZhao", 
       AuthorAge = 28, 
       AuthorCountry = "Song" 
      }; 
     var bag = new MyBag 
      { 
       Owner = "shoren", 
       MyBook = book 
      }; 

à

{ 
     "Owner": "shoren", 
     "MyBook": { 
      "BookName": "Yu Wen", 
      "BookPrice": 56.0, 
     } 
    } 
+0

Essayez ce [lien] (http://dotnet.dzone.com/news/serialize-only-specific-class). Faites-moi savoir si ça aide. – Nilesh

+0

merci, mais ce n'est pas mon problème. Je voudrais que le sérialiseur Json analyse l'attribut personnalisé. Par exemple, a est une instance de classe A, string result = JsonConvert.SerializeObject (a); le résultat montrerait que myData n'a que deux champs, DataVersion et DataId. – shoren

Répondre

2

Essayez ScriptIgnoreAttribute

public class Book 
{  
    public string BookName { get; set; } 
    public decimal BookPrice { get; set; }  

    [ScriptIgnore] 
    public string AuthorName { get; set; } 

    [ScriptIgnore] 
    public int AuthorAge { get; set; } 

    [ScriptIgnore] 
    public string AuthorCountry { get; set; } 
} 

solution plus appropriée est de créer BookViewModel classe uniquement avec deux champs dont vous avez besoin, la carte de votre Book instanse à BookViewModel exemple dans le contrôleur et passer vue modèle au lieu de modèle pour afficher (serilalize à JSON).