2016-05-03 6 views
-1
public class Employee 
{ 
    publlic string FullName { get; set; } 
    [JsonIgnore] 
    public List<abc> Abc { get; set; } 
} 

は、どのように私はそれにJsonIgnoreを有しているにも関わらず、プロパティAbcを含めることができていているプロパティを含めますか?は、オブジェクトをデシリアライズするときJsonIgnore

+2

あなたのデザインを再考する必要があるような気がします。部分クラスのような – Casey

答えて

3

シリアル化されたデータがAbcというプロパティーを持っている場合(逆シリアル化したいので)、[JsonIgnore]属性を持たない別のクラスを作成し、そのクラスとしてJSONを逆シリアル化します。

Employeeクラスを使用していて、その属性が存在する限り、シリアライザはその属性に従います。それがそこにあるのです。

絶対にEmployeeクラスである必要があり、属性を削除できない場合は、それを「その他の」クラスとして逆シリアル化し、それを使用してEmployeeのインスタンスを作成します。

var employeeWithAbc = JsonConvert.DeserializeObject<EmployeeWithAbc>(json); 
var employee = new Employee { 
    FullName = employeeWithAbc.FullName, 
    Abc = employeeWithFullName.Abc } 

ただし、間違った問題が考えられます。なぜあなたはその物件に[JsonIgnore]を持っていますか?

+0

の権利?私はそのようなシナリオを試みましたが、同じプロパティでは受け入れられません。 – PongPagong

+0

部分クラスではなく、ただ別のクラスです。シリアライザは、正しいプロパティを持っている限り、それがクラスであるかどうかは気にしません。クラスのインスタンスを作成し、それをJSON内のものに移入するだけです。 'Employee'のインスタンスが必要な場合は、逆シリアル化した別のクラスを使用して、' Employee'の新しいインスタンスを作成することができます。 –

+0

jsonignoreを追加しました。なぜなら、私は子コレクションオブジェクトを取得したくないからです。 – PongPagong

0

あなたのEmployeeクラスに多くの属性がある場合、Scottさんのアドバイスに従って、別の部分クラスを作成することができます(自分自身を繰り返さず、必要以上に作業をしないようにする)。私。

public class Employee 
{ 
    public string name 
    { 
     get; 
     set; 
    } 
} 

をそして、あなたはその後、Employeeのプロパティ/属性を継承するEmployeeの派生クラスを作成して、他の特定のシリアライズ/ deserialiseクラスを作成することができます。次のようにあなたのベースクラスEmployeeを持つことができ

public class ParseEmployee : Employee 
{ 
    public public List<abc> Abc 
    { 
     get; 
     set; 
    } 
} 
+0

私はあなたのポイントとアレックスを得るが、よりエレガントな方法を探して... – PongPagong

関連する問題