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

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

WBOY
リリース: 2016-07-21 15:07:24
オリジナル
988 人が閲覧しました

この記事では主に 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 プロジェクトに...があるとします。
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート