2017-07-21 15 views
1

同様のデータをjsonからクラスオブジェクトにデシリアライズするとき。空のプロパティと新しいクラスの比較

A)ヌルプロパティを持つクラスがありますか?

B)見たいと思うプロパティだけを持つ別のクラスをお持ちですか?例えば

:私はこのようなデータを持つようにしたい場合には:

public class Author 
{ 
    public Data data { get; set; } 
} 

public class Data 
{ 
    public string first { get; set; } 
    public string prev { get; set; } 
    public string next { get; set; } 
    public string self { get; set; } 
    public string type { get; set; } 
    public string id { get; set; } 
} 

のみidtypeこれまでAuthorのために取り込ま、我々は他の人を期待することはありません取得し、のは、このケースで言ってみましょう。

次のようにするとより効率的ですか?

public class Author 
{ 
    public AuthorData data { get; set; } 
} 

public class AuthorData 
{ 
    public string type { get; set; } 
    public string id { get; set; } 
} 

これは明らかDataは異なる場所で異なる方法で使用することができる場合であるので、異なる時間にヌル他の特性を有します。

私たちのコードベースは明らかに、リサイクルすることでオブジェクト数がはるかに少なくなりますDataしかし、これがアプリケーションの実行にどのように影響しますか? デシリアライズのために一般的に型付けされたクラスを使用するのは間違っていますか?

+1

「効率的」という定義によります。それは、バージョンとテストの両方を試してみてください。 – DavidG

+0

効率性が重要な要素ですが、このような状況を処理するための「標準」が何であるかもわかります。私は両方をテストして、それが本当に基準ではなく効率の問題に過ぎないのかどうかを判断します。 – Bitz

+4

標準はありません。すべてのアプリはそれぞれ異なり、さまざまなソリューションが必要です。実際には、目に見える違いがないことが常に分かります。これを読んでください:https://ericlippert.com/2012/12/17/performance-rant/ – DavidG

答えて

1

コメントで述べたように、ヌルプロパティを残しておくとスピードとサイズの違いは最小限に抑えられますが、それらのマイナーな利点を無視できる場合は、常に値なしのプロパティを含めます。

なぜですか?これは、受信側がJSONを受信側の対応するクラスに解析する前に、各プロパティが存在するかどうか最初にチェックする必要がないことを意味します。

また、JSONをC#アプリケーションでシリアル化すると、プロパティがデフォルト値で再びそこに存在し、プロパティのnull値を処理する方法を構築する必要があります。少なくとも、プロパティが常にそこにあることを知ることで、受信者にとってより簡単になります。

関連する問題