2017-03-22 16 views
1
public class Student 
{ 
     public string Name { get; set;} = "ABCD"; 
     public List<Subject> Subjects {get; set;} 
     public Student() 
     { 
      Subjects = new List<Subject>(); 
      SetDefaultSubject(); 
     } 

     private void SetDefaultSubject() 
     { 
      this.Subjects.Add(new Subject(){Name = "English"}); 
      this.Subjects.Add(new Subject(){Name = "Maths"}); 
     } 
} 

public class Subject 
{ 
    public string Name {get; set;} 
} 

私はこのJSON直列化復元は、プロパティ

var jsonStudentData = @"{""Name"":""ABC"",""Subjects"":[{""Name"":""English""},{""Name"":""Maths""},{""Name"":""Hindi""},{""Name"":""Social Studies""}]}"; 

のように見えるJSON文字列を持っているにデフォルト値を上書きしません。これは私が

JsonConvert.DeserializeObject<Student>(jsonStudentData); 

jsonStudentData

をdeserialisingています私のコードです私は出力を得ています
名前= ABC、 件名[英語、数学、ヒンズー語、社会、社会]

しかし、私は、出力

名= ABC、 件名[英語、数学、ヒンディー語、社会科]たい

は、私はここで何も悪いことをしています。

+0

'パブリック文字列名前{取得します。 set;} = "ABCD"; 'は有効な' c# 'コードではありません。 – Smartis

+0

関連または重複:[直列化を解除するとリストエントリのコピーが発生する](https://stackoverflow.com/q/36314523/3744182) – dbc

答えて

1

あなたの期待は間違っています。基本的には、JSONのデシリアライザはある - 完全に合理的に、IMO - に実行されるコードと同等:あなたのJSONは基本的にそれが何をすべきと言うものだ

var student = new Student 
{ 
    Name = "ABC", 
    Subjects = 
    { 
     // Each line here will just call Add 
     new Subject { Name = "English" }, 
     new Subject { Name = "Maths" }, 
     new Subject { Name = "Hindi" }, 
     new Subject { Name = "Social Studies" }, 
    } 
}; 

。あなたのSetDefaultSubjectsは、JSONの内容にかかわらず、より多くの情報を追加しています。

私は個人的にあなたのコンストラクタからSetDefaultSubjectsに呼び出しを削除示唆している - おそらくCreateStudentWithDefaultSubjectsのファクトリメソッドを追加します。

また、あなたのListいくつかの種類(例えばHashSet)のセットにすることを検討して、重複を追加できるようにSubjectは、IEquatable<Subject>を実装作り、それらは無視されます可能性があります。

0

また、C#関数を使用して逆シリアル化することもできます。

アセンブリ:(System.Web.Extensions.dll中)System.Web.Extensions

string jsonStudentData = @"{""Name"":""ABC"",""Subjects"":[{""Name"":""English""},{""Name"":""Maths""},{""Name"":""Hindi""},{""Name"":""Social Studies""}]}"; 
    JavaScriptSerializer serializer = new JavaScriptSerializer(); 
    Student newStudent = serializer.Deserialize<Student>(jsonStudentData); 
+0

大変ありがとうございます。これは私にとってはうまくいきます:) – Sachin

+0

助けが得られたら、答えを受け入れてください。将来他人を助ける –

関連する問題