ホームページ バックエンド開発 C#.Net チュートリアル ASP.NET での JSON のシリアル化と逆シリアル化

ASP.NET での JSON のシリアル化と逆シリアル化

Dec 20, 2016 am 09:12 AM
.net

はじめに: JSON は、ブラウザーの Web ページで実行される JavaScript コード用に特別に設計されたデータ形式です。この記事では、ASP.NET での JSON のシリアル化とデコードについて紹介します。主に、JSON の簡単な紹介、ASP.NET のシリアル化と逆シリアル化の方法、およびシリアル化と逆シリアル化での日付と時刻、コレクション、辞書の処理方法について説明します。

1. JSON の概要

JSON (JavaScript Object Notation、JavaScript Object Notation) は軽量のデータ交換形式です。

JSON は、中括弧「{}」、角括弧「[]」、カンマ「,」、およびコロンで構成される「名前と値のペア」のコレクション構造です。 「:」は二重引用符「」、「」で構成され、含まれるデータ型はオブジェクト、数値、ブール値、文字列配列、NULL などです。

JSON の形式は次のとおりです。

オブジェクト (オブジェクト) は、「名前と値のペア」の順序のないコレクションです。オブジェクトは「{」で始まり、「}」で終わります。 "、複数の「名前と値のペア」はカンマで区切られます。例:

VAR user = {"名前": "Zhang San"、"性別": "男性"、"誕生日": "1980 年 8 月 8 日" }

配列 (array) は、「[」で始まり、「]」で終わる、順序付けられた値の集合です。

VAR user list = [{ "user":{"名前 ": "張三", "性別": "男性", "誕生日": "1980 年 8 月 8 日"}}, {"ユーザー": {"名前" "李思", "性別": "男性" ","誕生日":"1985 年 5 月 8 日"}}];

文字列 (string) は、バックスラッシュ エスケープを使用して二重引用符で囲まれた任意の数の Unicode 文字のコレクションです。

2 番目、JSON データのシリアル化と逆シリアル化

DataContractJsonSerializer クラスを使用して、型インスタンスを JSON 文字列にシリアル化し、JSON 文字列を型インスタンスに逆シリアル化できます。 DataContractJsonSerializer は System.Runtime.Serialization.Json 名前空間の下にあり、.NET Framework 3.5 は System.ServiceModel.Web .dll ファイルに含まれており、.NET Framework 4 への参照を System.Runtime に追加する必要があります。連載化。

DataContractJsonSerializer のシリアル化および逆シリアル化コードの使用:

1: System の使用;

2: System.Collections.Generic の使用

4: System.Web の使用;

5: 使用System.Runtime.Serialization.Json;

6: System.IO を使用します;

7: System.Text を使用します;

8:

9: ///

10:/// JSON シリアル化と逆シリアル化ヘルパークラス

11:///

12: パブリッククラス JsonHelper

13: {

14:/// <概要>

15: /// JSON シリアル化

16: ///

17: パブリック静的文字列 JsonSerializer (T T)

18: {

19: DataContractJsonSerializer Ser = new DataContractJsonSerializer(typeof(T)); MemoryStream ミリ秒 = new MemoryStream();

21: ser.WriteObject(MS, T);

22: 文字列 jsonString = Encoding.UTF8 .GetString(ms.ToArray());

23: ms.Close() ;

24: jsonString を返す;

25:}

26:

27:/// <概要>

28:/// JSON デシリアライズ

29:///

30: パブリック静的 JsonDeserialize (string jsonString)

31: {

32: DataContractJsonSerializer SER = new DataContractJsonSerializer(typeof(T));

33: MemoryStream ミリ秒 = new MemoryStream(Encoding.UTF8.Get)バイト(jsonString)); 34: T obj = (T)ser.ReadObject(MS) ;

35: Return OBJ;

36: }

37: }

シリアル化デモ:

単純なオブジェクト人:

1: パブリック クラス パーソン

2: {

3: パブリック文字列名 {; グループ; }

4: パブリック解釈年齢 {Get; グループ; }

JSON 文字列にシリアル化:

1 : 無効な Page_Load(オブジェクト送信者、送信された EventArgs ) を保護します

2: {

3: 人物 p = new Person(); 4: p.Name = "Zhang San" 5: p.Age = 28; ;

6:

7: String jsonString = JsonHelper.JsonSerializer (P);

8: (jsonString) に返信します: }

出力結果:

{"era": 28日、"name": "Zhang San"}

逆シリアル化デモ:

1: 無効な Page_Load (オブジェクト送信者、送信された EventArgs) を保護

2: {

3: String jsonString = "{"age": 28 日, "名前": "張三"}";

4 人 P = JsonHelper.JsonDeserialize <人>(jsonString);

5:}

実行結果:

ASP.NET での JSON シリアル化と逆シリアル化は、Web.Script で JavaScriptSerializer も使用できます。 .Serializatio 名前空間では、System.Web.Extensions.dll を参照する必要があります。 JSON.NETも利用可能です。

三、JSON シリアル化と逆シリアル化の日付と時刻の処理

JSON 形式は日付と時刻を直接サポートしていません。DateTime 値は、「/Date (700000 + 0500)/」の形式で JSON 文字列として表示されます。最初の数値 (この例では 700000) は、1970 年 1 月 1 日の午前 0 時から GMT タイム ゾーンでの通常時間 (夏時間ではない) で経過したミリ秒数です。以前の時間を表すために、数値は負の値になる場合があります。 「0500」を含む例のオプション部分は、時刻がローカル タイプであること、つまり、逆シリアル化するときにローカル タイム ゾーンに変換する必要があることを示します。この部分がないと、時刻は UTC に逆シリアル化されます。

person クラスを変更し、LastLoginTime を追加します:

1: パブリック クラス パーソン

3: パブリック文字列名 {;

4: パブリック解釈年齢 {get; }

5 : public DateTime LastLoginTime {get; }

6:}

2: p.Name = "张三";

4: p.LastLoginTime = DateTime.Now;

5:

6: String jsonString = JsonHelper.JsonSerializer <人>(P);

シリアル化結果:

{"元号" : 28th, " LastLoginTime": "/Date (1294499956278 + 0800) /", "Name": "Zhang San"}

1. バックグラウンドで正規表現を使用して置換処理を変更する JsonHelper:

1: Use System;

2 : System.Collections.Generic を使用します;

3: System.Linq を使用します;

4: System.Web を使用します;

5: System.Runtime.Serialization.Json を使用します;

6: System.IO を使用します;

7: System.Text;

の使用 8: System.Text. RegularExpressionsの使用;

9:

10:/// <概要>

11:/// JSONシーケンス 12:///

13: パブリッククラス JsonHelper

14: {

15:///

16:// /JSON シリアル化

17: ///

18:パブリック静的文字列 JsonSerializer (T T)

19: {

20: DataContractJsonSerializer SER = new DataContractJsonSerializer(操作のタイプ (T));サー.WriteObject(MS, T);

23: String jsonString = Encoding.UTF8.GetString(ms.ToArray( ));

24: ms.Close(); // Json の日付文字列を置き換えます

26: String P = @"\/Date ((D+) + D+)\/" ;

27: MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertJsonDateToDateString);

28: 正規表現の章 = 新しい正規表現 (P);

29: jsonString = reg.Replace(jsonString, matchEvaluator);

30 : return jsonString;

31:}

32:

33:///

34:/// JSON逆シリアル化

35:/// 概要>

36: Public static JsonDeserialize (string jsonString)

37: {

38: //文字列を "YYYY-MM" の形式に変換します-DD HH:MM:SS" to "/Date ( 1294499956278 + 0800) /"形式

39: String P = @" D {4} - d {2} - d {2} S D {2}: D { 2}: D {2}";

40: MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertDateStringToJsonDate);

41: 正規表現の章 = 新しい正規表現 (P);

42: jsonString = reg.Replace(jsonString, matchEvaluator) );

43: DataContractJsonSerializer SER = new DataContractJsonSerializer(typeof(T));

44: MemoryStream ミリ秒 = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));

45: T obj = (T)ser. ReadObject(MS);

46: OBJ に戻る;

47:}

48:

49:/// <概要>

50: ///Json シリアル化時間を /date (1294499956278 +) で変換0800) 文字列の場合

51:///

52: プライベート静的文字列 ConvertJsonDateToDateString(semi)

53: {

54: 文字列結果 = String.Empty;

55 :DateTime dt = new DateTime(1970,1,1);

56: DT = dt.AddMilliseconds(long.Parse(m.Groups[1].value));

57: DT = dt.ToLocalTime();

58: 結果 = dt.ToString("YYYY- MM) -DD HH:MM:SS");

59: 結果を返します;

60: }

61:

62:///

63: ///時間文字列 Time を次のように変換します。 Json に変換します

64: ///

65: プライベート静的文字列 ConvertDateStringToJsonDate (semi)

66: {

67: 文字列結果 = String.Empty;

68: DateTime DT = DateTime .Parse(m.Groups[0].value);

69: DT = dt.ToUniversalTime();

70: タイムスパン TS = DT - DateTime.Parse("1970 -01-01"); : result = String.Format("\/Date({0}+0800)\/", ts.TotalMilliseconds);

72: 結果を返す

73:}

74:}

シリアル化のデモ:

1: 人物 p = 新しい人物();

2: p.Name = "Zhang San";

3: p.Age = 28;

4 : p.LastLoginTime = DateTime.Now;

5:

6: String jsonString = JsonHelper.JsonSerializer (P);

実行結果:

{"Era": 28th, "LastLoginTime" ": "2011-01-09 1 時 56 秒", "名前": "張三"}

逆シリアル化デモ:

JSON string = "{"年齢": 28th,"最終ログイン時刻" :"2011-01-09 00:30:00","名前": "Zhang San"}";

P = JsonHelper.JsonDeserialize <人>(JSON);

実行結果:

バックグラウンドで置換する文字列の範囲は比較的狭いため、置き換える場合はさらに面倒になります。グローバリゼーションの多言語について考えてみましょう。

2. JavaScriptを使った処理

1: 関数 ChangeDateFormat(jsondate) {

2: jsondate = jsondate.replace("/date(","").replace(")/","");

3: If (jsondate.indexOf ("+") > 0) {

4: jsondate = jsondate.substring (0, jsondate.indexOf ("+"));

5: }

6: それ以外の場合(jsondate.indexOf("-")> 0) {

7: jsondate = jsondate.substring(0, jsondate.indexOf("-"));

8:}

9:

10: VAR date = new date(parseInt function(jsondate, 10));

11: var month = date.getMonth() + 1

13: date.getFull Year() + "-" + month + "-" + currentdate を返します

14: }

簡単なデモ:

ChangeDateFormat("/Date(1294499956278+0800)/");

結果:

4、コレクション、辞書、配列の JSON シリアル化と逆シリアル化

JSON データでは、すべてのコレクション、辞書、配列は両方とも配列として表されます。

リスト シリアル:

1: リスト <人物> リスト <人物>()

2: {

3: 新しい人物() {name=" 張三"、年齢 = 28},

4: new person() {name = "李思", age = 25}

5: };

6:

7: String jsonString = JsonHelper > ;(リスト);

シリアル結果:

"[{"年齢": 28,"名前":"張三"},{"年齢": 25, "名前": "李思"}]"

辞書を JSON に直接使用することはできません。辞書の JSON への変換は、元の辞書形式と一致しませんが、辞書のキーを名前「key」の値として使用します。 「value」という名前の値。例:

1: Dictionary DIC = New Dictionary();

2: dic.Add("Name", "Zhang San"); ("元号", "28");

4:

5: String jsonString = JsonHelper.JsonSerializer >(DIC);

1: "[{ "key": "名前", "value": "張三"}, {"key": "年齢", "value": "28"}]"

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

C# の雇用の見通しはどのようなものですか? C# の雇用の見通しはどのようなものですか? Oct 19, 2023 am 11:02 AM

初心者でも経験豊富なプロフェッショナルでも、C# をマスターすることでキャリアへの道が開かれます。

いくつかの .NET オープンソース AI および LLM 関連プロジェクト フレームワークを共有する いくつかの .NET オープンソース AI および LLM 関連プロジェクト フレームワークを共有する May 06, 2024 pm 04:43 PM

現在、人工知能(AI)技術の開発は本格化しており、さまざまな分野で大きな可能性と影響力を発揮しています。本日、Dayao は、参考にしていただけるよう、4 つの .NET オープン ソース AI モデル LLM 関連プロジェクト フレームワークを共有します。 https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.mdSemanticKernelSemanticKernel は、OpenAI、Azure などの大規模言語モデル (LLM) を統合するように設計されたオープン ソース ソフトウェア開発キット (SDK) です。

開発者向けの .NET パフォーマンス最適化テクノロジ 開発者向けの .NET パフォーマンス最適化テクノロジ Sep 12, 2023 am 10:43 AM

.NET 開発者は、高品質のソフトウェアを提供するために機能とパフォーマンスを最適化することの重要性を認識する必要があります。提供されたリソースを巧みに活用し、Web サイトの読み込み時間を短縮することで、ユーザーに快適なエクスペリエンスを提供するだけでなく、インフラストラクチャのコストも削減できます。

Java フレームワークと .NET フレームワークのパフォーマンスの違い Java フレームワークと .NET フレームワークのパフォーマンスの違い Jun 03, 2024 am 09:19 AM

同時実行性の高いリクエスト処理の点では、.NETASP.NETCoreWebAPI は JavaSpringMVC よりも優れたパフォーマンスを発揮します。その理由としては、AOT の早期コンパイルにより起動時間が短縮され、開発者がオブジェクト メモリの割り当てと解放を行うため、より洗練されたメモリ管理が行われます。

c#.netインタビューの質問と回答:専門知識を高める c#.netインタビューの質問と回答:専門知識を高める Apr 07, 2025 am 12:01 AM

C#.NETインタビューの質問と回答には、基本的な知識、コアの概念、高度な使用が含まれます。 1)基本知識:C#は、Microsoftが開発したオブジェクト指向言語であり、主に.NETフレームワークで使用されています。 2)コアの概念:委任とイベントは動的な結合方法を可能にし、LINQは強力なクエリ関数を提供します。 3)高度な使用:非同期プログラミングは応答性を向上させ、式ツリーは動的コード構造に使用されます。

高度なC#.NETチュートリアル:次のシニア開発者インタビューをエース 高度なC#.NETチュートリアル:次のシニア開発者インタビューをエース Apr 08, 2025 am 12:06 AM

C#シニア開発者とのインタビューでは、非同期プログラミング、LINQ、.NETフレームワークの内部作業原則などのコア知識をマスターする必要があります。 1.非同期プログラミングは、非同期を通じて操作を簡素化し、アプリケーションの応答性を向上させるのを待ちます。 2.LinqはSQLスタイルでデータを操作し、パフォーマンスに注意を払います。 3.ネットフレームワークのCLRはメモリを管理し、ガベージコレクションに注意して使用する必要があります。

C#.NET:コアの概念とプログラミングの基礎を探る C#.NET:コアの概念とプログラミングの基礎を探る Apr 10, 2025 am 09:32 AM

C#は、Microsoftによって開発された最新のオブジェクト指向プログラミング言語であり、.NETフレームワークの一部として開発されています。 1.C#は、カプセル化、継承、多型を含むオブジェクト指向プログラミング(OOP)をサポートしています。 2。C#の非同期プログラミングは非同期を通じて実装され、適用応答性を向上させるためにキーワードを待ちます。 3. LINQを使用してデータ収集を簡潔に処理します。 4.一般的なエラーには、null参照の例外と、範囲外の例外インデックスが含まれます。デバッグスキルには、デバッガーと例外処理の使用が含まれます。 5.パフォーマンスの最適化には、StringBuilderの使用と、不必要な梱包とボクシングの回避が含まれます。

Webからデスクトップまで:C#.NETの汎用性 Webからデスクトップまで:C#.NETの汎用性 Apr 15, 2025 am 12:07 AM

c#.netisversatileforbothwebanddesktopdevelopment.1)forweb、useasp.netfordynamicapplications.2)fordesktop、equindowsorwpfforrichinterfaces.3)usexamarinforcross-platformdeveliment、enabling deshacrosswindows、

See all articles