2016-10-07 8 views
0

エンティティオブジェクトは、人間の読書のためにログファイルに格納するために文字列に変換する必要があります。 実行時に派生エンティティにプロパティを追加できます。 Serializeは、エンティティの基本クラスで定義されます。 私は以下のコードを試しますが、null値のプロパティも返します。 多くのプロパティはnull値を持つため、ログを読みにくくします。Json.Netの派生クラスでnull以外のプロパティのみをシリアル化する方法

Hoqは、NULL以外のプロパティのみをシリアル化しますか? は私がに確認されたように、これが唯一のEntityBaseクラスのプロパティをシリアライズも

 var jsonSettings = new JsonSerializerSettings() 
     { 
      DefaultValueHandling = DefaultValueHandling.Ignore, 
      Formatting = Formatting.Indented, 
      TypeNameHandling= TypeNameHandling.All 
     }; 
     return JsonConvert.SerializeObject(this, GetType(), jsonSettings); 

みましたnewtonsoft json does not serialize derived class properties

public class EntityBase { 

     public string Serialize() 
     { 
      var s = new System.Web.Script.Serialization.JavaScriptSerializer(); 
      s.Serialize(this); 

     } 
    } 

public class Customer: EntityBase { 
    public string Name, Address; 
    } 

テストケース:

観測
var cust= new Customer() { Name="Test"}; 
    Debug.Writeline(cust.Serialize()); 

:結果が "住所" が含ま:ヌルを

期待される結果:結果の音はAddrを含んでいませんessプロパティ。

ASP.NET/Mono MVC4、.NET 4.6は、あなたがnullの特性を無視し、独自のシリアライザを作成することができます

+0

これはあなたを助けるかもしれないhttp://stackoverflow.com/questions/8513042/json-net-serialize-deserialize-derived-types – ltiveron

+0

私はこれに応じて 'TypeNameHandling = TypeNameHandling.All'を試してみました。また、 'JsonConvert.SerializeObject(this、GetType()、jsonSettings)'を使って型を渡そうとしましたが、子クラスのプロパティはまだシリアル化されていません。 – Andrus

+0

あなたはどういう意味ですか?*プロパティは実行時に派生したエンティティに追加されます*。あなたは本当にランタイム*を意味しますか?もしそうなら、あなたのベースクラスは 'ExpandoObject'か何かを継承していますか? – dbc

答えて

0

を使用しています。

  JsonConvert.SerializeObject(
       object, 
       Newtonsoft.Json.Formatting.None, 
       new JsonSerializerSettings 
       { 
        NullValueHandling = NullValueHandling.Ignore 
       }); 
関連する問題