1

JSON 文字列を解析する方法を探していたところ、これら 2 つの方法に出会いました。

class Test {

      String test; 

      String getTest() { return test; }
      String setTest(String test) { test = test; }

  }

var ser = new JavaScriptSerializer();
Test abc = (Test)ser.DeserializeObject("{ \"test\":\"some data\" }");

var ser = new JavaScriptSerializer();
Test abc = ser.Deserialize<Test>("{ \"test\":\"some data\" }");

1 つ目はオブジェクトを型にキャストし、2 つ目は型を指定していますか? それらの間に本当の違いはありますか?1つの方法がより望ましいですか?

4

2 に答える 2

3

2 番目のオプション (ジェネリックDeserialize<T>メソッドを使用) は、特定の型を想定しているため、特定の例に適しています。

入力が期待するタイプのオブジェクトを表していない場合、どちらもわずかに異なる結果を生成します。最初のケースでは、キャストで InvalidCastException を取得し、2 番目のケースでは、Deserialize メソッドが InvalidOperationException をスローします。しかし、それ以外には、パフォーマンスなどの点で違いはありません。実際、のドキュメントにDeserialize<T>は次のように記載されています。

Deserialize メソッドは、最初に DeserializeObject メソッドを使用してオブジェクト グラフを取得し、次に結果を型 T にキャストしようとすることと同じです。

于 2012-04-28T00:20:24.937 に答える
3

いいえ、最初のものの唯一の目的は、結果の型がわからない場合でも逆シリアル化を実行できるようにすることです。(2番目のものは自動的にキャストを実行します)しかし、実質的な違いはありません。(文字通り、唯一の違いは、後者が前者の結果を自動キャストすることです)

于 2012-04-28T00:06:29.907 に答える