ホームページ バックエンド開発 PHPチュートリアル 深い理解: XML とオブジェクトのシリアル化と逆シリアル化_PHP チュートリアル

深い理解: XML とオブジェクトのシリアル化と逆シリアル化_PHP チュートリアル

Jul 21, 2016 pm 03:07 PM
xml そして 主要 物体 連載 記事 深く行く 理解する

この記事では主に XML とオブジェクトのシリアル化と逆シリアル化について説明します。また、誰でも使用できるように、いくつかの簡単なシリアル化および逆シリアル化メソッドが付属します。
Web プロジェクトにこのようなクラスが 2 つあるとします

コードをコピーします コードは次のとおりです:

public class Member
{
public string Num { get; }
public string Name { get; set ; }
}
public class Team
{
public List get; }
}

Team クラスのインスタンスを URL に送信する必要があるとします。 ,
もちろん、この機能はフォームの隠しフィールド送信を使用して完了することができます。


チームに 30 個のデータが含まれている場合はどうなりますか?
各メンバーを区別するには、パラメーター名に接尾辞を追加する必要があります。これを完了するには、大規模な一連の非表示フィールドが必要です:

コードをコピーします コードは次のとおりです:
@model Team


< ;input type="hidden" name="MemberNum1" value="@Model.Members[0].Num" />

...







Team がより複雑で、より入れ子になったらどうなるかを想像する勇気はありますか?
さて、このようにデータを転送するつもりでも、相手にとってパラメータ名が大量に表示されるのは頭の痛いことでしょう。
オブジェクトをネットワーク上で直接送信できないことは誰もが知っていますが、救済策はあります。


XML (Extensible Markup Language)Extensible Markup Language 自体はデータを格納するように設計されており、あらゆるオブジェクトを XML で記述することができます。 Team クラスを例に挙げます。
コードをコピーします コードは次のとおりです:

<名前>開発 <メンバー>
>002






このような XML ドキュメントは次のことを表します。チームのインスタンス。
賢明な読者であれば、XML はテキスト形式であるため、ネットワーク上で送信されるオブジェクト情報の伝達手段として使用できることをすでに考えているはずです。
XML ドキュメントとオブジェクトを相互に変換するにはどうすればよいですか?


XmlSerializer クラスがこの仕事を行います。



名前空間: システム。
Deserialize メソッドは XML 文字列を指定された型のオブジェクトに変換し、
Serialize メソッドはオブジェクトを XML 文字列に変換します。

コードをコピーします
コードは次のとおりです:

///
/// XML ドキュメントのシリアル化と逆シリアル化を提供します
///

public sealed class EncodeHelper
XML 文字列を指定された型にシリアル化します
object result;
using (StringReader stringReader = new StringReader(xml))catch(例外Innerexception){{{0} ';
///
/// 順序化オブジェクト对象は XML 文字列
///

public static string Serialize(object ObjectToSerialize)
{
文字列結果 = null ;
try
{
XmlSerializer xmlSerializer = new XmlSerializer(ObjectToSerialize.GetType());

using (MemoryStreammemoryStream = new MemoryStream())
{
XmlTextライター xmlTextWriter = new XmlTextWriter(memoryStream, new UTF8Encoding(false));
xmlTextWriter.Formatting = 書式設定.Indented;
xmlSerializer.Serialize(xmlTextWriter, ObjectToSerialize);
xmlTextWriter.Flush();
xmlTextWriter.Close();
UTF8Encoding uTF8Encoding = new UTF8Encoding(false, true);
result= uTF8Encoding.GetString(memoryStream.ToArray( ));
}
}
catch (Exception innerException)
{
throw new ApplicationException("オブジェクトをシリアル化できませんでした:" + ize.GetType().Name, innerException);
}
戻り結果;
}
}

このクラスを使用するには以下の参照を追加する必要があります
using System;
using System.Text;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
下面我们用一个制御台
生成コードは次のようになります。メンバー member2 = new Member { Name = "John", Num = "002" };
Members.Add(member1);
Members.Add(member2);
チームチーム = 新しいチーム { 名前 = "開発", Members = メンバー };
var xml = EncodeHelper.Serialize(team);//シリアル化
Console.Write(xml); Console.ReadLine();
チーム newTeam = EncodeHel per.Deserialize( xml, typeof(Team)) as Team; //逆シリアル化中に明示的な型変換が必要です
Console.WriteLine("Team Name:"+newTeam.Name);//逆シリアル化された newTeam オブジェクトを表示します
foreach (newTeam.Members の var member)
}
コンソール。 ReadLine( );
}


Console.Write(xml) コード行を実行すると、印刷された XML ドキュメントを確認できます。



コードをコピーします

コードは次のとおりです:



<名前>開発
<メンバー> < ;Num>001 ; <名前>マリー ; <名前>


は、記事の冒頭で示した例とまったく同じです。
最終的に逆シリアル化された newTeam オブジェクトは次のように出力されます。

チーム名: 開発
メンバー番号:001
メンバー名:Marry
メンバー番号:002
メンバー名:John

Web 通信の最初の例に戻ります。
XML シリアル化と逆シリアル化を使用してオブジェクトを処理します。転送するには、 XML 文字列に転送する必要があるオブジェクトをシリアル化し、隠しフィールドを使用してフォームを送信するだけで済みます。
その後、受信者は受信した XML 文字列を事前設定されたオブジェクトに逆シリアル化します。前提として、シリアル化プロセスと逆シリアル化プロセスが一貫していて、オブジェクトが同じであることに両当事者が同意する必要があります。

最後に、いくつかの機能を使用してシリアル化および逆シリアル化操作のプロセスを制御する方法を見てみましょう。開始の開始を変更しましょう。 コードをコピーします。

次のようにコードします:

Public class member
{
[x ["member_num")]
public string num {get set;}
public string name { get; ; セット; }
}
[XmlRoot("Our_Team")]
パブリック クラス チーム
{
メンバー { セット;
その後、先ほどのコンソール プログラムをもう一度実行すると、シリアル化の結果は次のようになります:
コードをコピーします コードは次のとおりです:



< ;メンバー>

002
John
< /メンバー>




元のルート ノード Team は Our_Team になり、Member の子ノード Num は Member_Num になり、Team の Name サブノードは無視されます。
可視機能 XmlRoot はルート ノードの表示と操作プロセスを制御でき、XmlElement は子ノードをターゲットとします。一部のメンバーが XmlIgnore としてマークされている場合、それらはシリアル化および逆シリアル化中に無視されます。
これらの機能の具体的な内容は MSDN で確認できるため、詳細については説明しません。
この知識があれば、ネットワーク内でオブジェクト データを転送することは難しくなくなります。 ^_^



http://www.bkjia.com/PHPjc/327539.html

www.bkjia.com

http://www.bkjia.com/PHPjc/327539.html技術記事この記事では主に、XML とオブジェクトのシリアル化と逆シリアル化について説明します。また、誰でも使用できるように、いくつかの簡単なシリアル化および逆シリアル化メソッドが付属します。 Web プロジェクトに...があるとします。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

今すぐ Toutiao の記事を公開してお金を稼ぐにはどうすればよいですか?今すぐ Toutiao で記事を公開して収入を増やす方法! 今すぐ Toutiao の記事を公開してお金を稼ぐにはどうすればよいですか?今すぐ Toutiao で記事を公開して収入を増やす方法! Mar 15, 2024 pm 04:13 PM

1. 今すぐ Toutiao の記事を公開してどうやってお金を稼ぐことができますか?今すぐ Toutiao で記事を公開して収入を増やす方法! 1. 基本的な権利と利益の有効化: オリジナルの記事は広告によって利益を得ることができますが、利益を得るにはビデオが横画面モードでオリジナルである必要があります。 2. ファン100人の権利を有効化:ファン数が100人以上に達すると、マイクロヘッドライン、オリジナルQ&amp;A作成、Q&amp;Aから利益を得ることができます。 3. オリジナル作品にこだわる: オリジナル作品には記事、小見出し、質問などが含まれ、300 ワード以上であることが求められます。違法に盗用された作品をオリジナル作品として出版した場合、クレジットポイントが減点され、利益も差し引かれますのでご注意ください。 4. 垂直性:専門分野の記事を書く場合、分野を超えて自由に記事を書くことができず、適切な推薦が得られず、専門性や洗練度が得られず、ファンもつきにくいそして読者たち。 5. 活動: 高活動、

MySQLクエリ結果の配列をオブジェクトに変換するにはどうすればよいですか? MySQLクエリ結果の配列をオブジェクトに変換するにはどうすればよいですか? Apr 29, 2024 pm 01:09 PM

MySQL クエリ結果の配列をオブジェクトに変換する方法は次のとおりです。 空のオブジェクト配列を作成します。結果の配列をループし、行ごとに新しいオブジェクトを作成します。 foreach ループを使用して、各行のキーと値のペアを新しいオブジェクトの対応するプロパティに割り当てます。新しいオブジェクトをオブジェクト配列に追加します。データベース接続を閉じます。

PHP 関数を使用して XML データを処理するにはどうすればよいですか? PHP 関数を使用して XML データを処理するにはどうすればよいですか? May 05, 2024 am 09:15 AM

PHPXML 関数を使用して XML データを処理します。 XML データを解析します。 simplexml_load_file() および simplexml_load_string() は、XML ファイルまたは文字列を読み込みます。 XML データにアクセスする: SimpleXML オブジェクトのプロパティとメソッドを使用して、要素名、属性値、およびサブ要素を取得します。 XML データを変更する: addChild() メソッドと addAttribute() メソッドを使用して、新しい要素と属性を追加します。シリアル化された XML データ: asXML() メソッドは、SimpleXML オブジェクトを XML 文字列に変換します。実用的な例: 製品フィード XML を解析し、製品情報を抽出し、変換してデータベースに保存します。

PHP 関数はどのようにオブジェクトを返すのでしょうか? PHP 関数はどのようにオブジェクトを返すのでしょうか? Apr 10, 2024 pm 03:18 PM

PHP 関数は、return ステートメントに続いてオブジェクト インスタンスを使用してオブジェクトを返すことにより、データをカスタム構造にカプセル化できます。構文: functionget_object():object{}。これにより、カスタム プロパティとメソッドを使用してオブジェクトを作成し、オブジェクトの形式でデータを処理できるようになります。

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

C++ 関数がオブジェクトを返すときは何に注意する必要がありますか? C++ 関数がオブジェクトを返すときは何に注意する必要がありますか? Apr 19, 2024 pm 12:15 PM

C++ では、関数がオブジェクトを返すときに注意する点が 3 つあります。 オブジェクトのライフサイクルは、メモリ リークを防ぐために呼び出し元によって管理されます。ぶら下がりポインタを回避し、動的にメモリを割り当てるかオブジェクト自体を返すことにより、関数が戻った後もオブジェクトが有効なままであることを確認します。コンパイラーは、パフォーマンスを向上させるために、返されたオブジェクトのコピー生成を最適化する場合がありますが、オブジェクトが値セマンティクスによって渡される場合、コピー生成は必要ありません。

C++ 関数ライブラリはシリアル化と逆シリアル化をどのように実行しますか? C++ 関数ライブラリはシリアル化と逆シリアル化をどのように実行しますか? Apr 18, 2024 am 10:06 AM

C++ ライブラリのシリアル化および逆シリアル化ガイド シリアル化: 出力ストリームの作成とアーカイブ形式への変換。オブジェクトをシリアル化してアーカイブします。逆シリアル化: 入力ストリームを作成し、アーカイブ形式から復元します。アーカイブからオブジェクトを逆シリアル化します。実践例: シリアル化: 出力ストリームの作成。アーカイブ オブジェクトを作成します。オブジェクトを作成してアーカイブにシリアル化します。逆シリアル化: 入力ストリームを作成します。アーカイブ オブジェクトを作成します。オブジェクトを作成し、アーカイブから逆シリアル化します。

Java のシリアル化はパフォーマンスにどのような影響を与えますか? Java のシリアル化はパフォーマンスにどのような影響を与えますか? Apr 16, 2024 pm 06:36 PM

Java パフォーマンスに対するシリアル化の影響: シリアル化プロセスはリフレクションに依存しているため、パフォーマンスに大きな影響を与えます。シリアル化では、オブジェクト データを保存するためのバイト ストリームの作成が必要となり、メモリ割り当てと処理コストが発生します。大きなオブジェクトをシリアル化すると、大量のメモリと時間が消費されます。シリアル化されたオブジェクトは、ネットワーク経由で送信されるときに負荷を増加させます。

See all articles