この記事は機械翻訳されています。英語版の記事を表示するには、[英語] のチェック ボックスをオンにしてください。また、テキストにマウス ポインターを合わせると、ポップアップ ウィンドウに英語のテキストを表示することもできます。
翻訳
英語

JavaScriptSerializer クラス

 

公開日: 2016年10月

Json.NET 使用されるシリアル化および逆シリアル化する必要があります。 AJAX 対応アプリケーションにシリアル化および逆シリアル化の機能を提供します。

名前空間:   System.Web.Script.Serialization
アセンブリ:  System.Web.Extensions (System.Web.Extensions.dll 内)

System.Object
  System.Web.Script.Serialization.JavaScriptSerializer

public class JavaScriptSerializer

名前説明
System_CAPS_pubmethodJavaScriptSerializer()

型リゾルバーを持たない JavaScriptSerializer クラスの新しいインスタンスを初期化します。

System_CAPS_pubmethodJavaScriptSerializer(JavaScriptTypeResolver)

カスタムの型リゾルバーを持つ JavaScriptSerializer クラスの新しいインスタンスを初期化します。

名前説明
System_CAPS_pubpropertyMaxJsonLength

JavaScriptSerializer クラスによって受け入れられる JSON 文字列の最大長を取得または設定します。

System_CAPS_pubpropertyRecursionLimit

処理されるオブジェクト レベル数の制限値を取得または設定します。

名前説明
System_CAPS_pubmethodConvertToType(Object, Type)

指定したオブジェクトを指定した型に変換します。

System_CAPS_pubmethodConvertToType<T>(Object)

指定したオブジェクトを指定した型に変換します。

System_CAPS_pubmethodDeserialize(String, Type)

JSON 形式の文字列を指定した型のオブジェクトに変換します。

System_CAPS_pubmethodDeserialize<T>(String)

指定した JSON 文字列を指定した型 T のオブジェクトに変換します。

System_CAPS_pubmethodDeserializeObject(String)

指定した JSON 文字列をオブジェクト グラフに変換します。

System_CAPS_pubmethodEquals(Object)

指定したオブジェクトが、現在のオブジェクトと等しいかどうかを判断します。(Object から継承されます。)

System_CAPS_protmethodFinalize()

オブジェクトが、ガベージ コレクションによって収集される前に、リソースの解放とその他のクリーンアップ操作の実行を試みることができるようにします。(Object から継承されます。)

System_CAPS_pubmethodGetHashCode()

既定のハッシュ関数として機能します。(Object から継承されます。)

System_CAPS_pubmethodGetType()

現在のインスタンスの Type を取得します。(Object から継承されます。)

System_CAPS_protmethodMemberwiseClone()

現在の Object の簡易コピーを作成します。(Object から継承されます。)

System_CAPS_pubmethodRegisterConverters(IEnumerable<JavaScriptConverter>)

カスタムのコンバーターを JavaScriptSerializer インスタンスに登録します。

System_CAPS_pubmethodSerialize(Object)

オブジェクトを JSON 文字列に変換します。

System_CAPS_pubmethodSerialize(Object, StringBuilder)

オブジェクトをシリアル化し、生成された JSON 文字列を指定の StringBuilder オブジェクトに書き込みます。

System_CAPS_pubmethodToString()

現在のオブジェクトを表す文字列を返します。(Object から継承されます。)

JavaScriptSerializer クラス、非同期通信レイヤーによって、ブラウザーと Web サーバーの間で渡されるデータを逆シリアル化およびシリアル化には内部的に使用します。 シリアライザーのインスタンスにアクセスできません。 ただし、このクラスは、パブリック API を公開します。 したがって、JavaScript Object Notation (JSON) をマネージ コードで作業するときに、クラスを使用できます。

オブジェクトをシリアル化を使用して、 Serialize メソッドです。 JSON 文字列を逆シリアル化を使用して、 Deserialize<T> または DeserializeObject メソッドです。 ネイティブにサポートされていない型を逆シリアル化およびシリアル化する JavaScriptSerializer, を使用してカスタムのコンバーターを実装、 JavaScriptConverter クラスです。 使用して、コンバーターを登録、 RegisterConverters メソッドです。

次の表は、シリアル化のプロセスは、マネージ型と JSON の間のマッピングを示します。 これらのマネージ型がサポートされている JavaScriptSerializerします。 JSON 文字列をマネージ型にシリアル化する場合は、同じマッピングが適用されます。 ただし、逆シリアル化は非対称で、します。シリアル化可能なすべてのマネージ型は、JSON から逆シリアル化することができます。

System_CAPS_noteメモ

多次元配列は 1 次元の配列としてシリアル化され、フラットな配列として使用する必要があります。

マネージ型

JSON と同じ

String (Utf-8 エンコーディングのみ)。

String

Char

String

1 つの null 文字 (など、\0)

Null

Boolean

ブール型。 として JSON で表現された true または false

null (null のオブジェクト参照と Nullable 値の型)。

文字列の値は null

DBNull

文字列の値は null

数値 (または、数値型と互換性のある) のプリミティブ型: Byte, 、SByte, 、Int16, 、Int32, 、Int64, 、UInt16, 、UInt32, 、UInt64, 、Double, 、および Singleです。 カルチャに依存しない文字列形式が使用されます。

数値

DateTime

JSON で表される日付オブジェクト"\/Date (タイマー刻みの数) \/"です。 タイマー刻みの数は、01 1970 年 1 月、UTC の午前 0 時から経過したタイマー刻み (ミリ秒) の数を示す正または負 long 値です。

サポートされる値は日付の最大 MaxValue (12/31/9999 11時 59分: 59 PM) と、サポートされている日付の最小値は MinValue (1/1/0001 12時 00分: 00)。

整数型の列挙

等価の列挙値の整数

型を実装する IEnumerable または System.Collections.Generic.IEnumerable<T> いるもの実装になっていない IDictionary または System.Collections.Generic.IDictionary<TKey, TValue>です。 など、型を含む Array, 、ArrayList, 、および List<T>です。

JSON 配列の構文を使用する配列

型を実装する IDictionary または System.Collections.Generic.IDictionary<TKey, TValue>です。 など、型を含む Dictionary<TKey, TValue>Hashtableです。

JSON ディクショナリの構文を使用する JavaScript オブジェクト

カスタムの具象 (抽象型) 型を持つパブリック インスタンス プロパティを持つは get アクセサーまたはパブリック インスタンス フィールドです。

書き込み専用のパブリック プロパティ、パブリック プロパティまたはパブリック フィールドの属性でマークされたことに注意してください ScriptIgnoreAttribute, 、これらの型のパブリックのインデックス付きプロパティは無視されます。

JSON ディクショナリの構文を使用する JavaScript オブジェクト。 "_ _Type"という名前の特殊なメタデータ プロパティは、逆シリアル化を確実に含まれています。 パブリック インスタンス プロパティが get し、set アクセサーを逆シリアル化を確認することを確認してください。

Guid

GUID の文字列表現

Uri

戻り値の文字列形式 GetComponents

最初の例では、データ オブジェクトを逆シリアル化およびシリアル化する方法の簡単な説明を提供します。 クラス名の下に表示されるユーザーが必要です。

using System;
using System.Collections.Generic;
using System.Web.UI;
using System.Web.Script.Serialization;

namespace ExampleApplication
{
    public partial class _Default : Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            var RegisteredUsers = new List<Person>();
            RegisteredUsers.Add(new Person() { PersonID = 1, Name = "Bryon Hetrick", Registered = true });
            RegisteredUsers.Add(new Person() { PersonID = 2, Name = "Nicole Wilcox", Registered = true });
            RegisteredUsers.Add(new Person() { PersonID = 3, Name = "Adrian Martinson", Registered = false });
            RegisteredUsers.Add(new Person() { PersonID = 4, Name = "Nora Osborn", Registered = false });

            var serializer = new JavaScriptSerializer();
            var serializedResult = serializer.Serialize(RegisteredUsers);
            // Produces string value of:
            // [
            //     {"PersonID":1,"Name":"Bryon Hetrick","Registered":true},
            //     {"PersonID":2,"Name":"Nicole Wilcox","Registered":true},
            //     {"PersonID":3,"Name":"Adrian Martinson","Registered":false},
            //     {"PersonID":4,"Name":"Nora Osborn","Registered":false}
            // ]

            var deserializedResult = serializer.Deserialize<List<Person>>(serializedResult);
            // Produces List with 4 Person objects
        }
    }
}
using System;

namespace ExampleApplication
{
    public class Person
    {
        public int PersonID { get; set; }
        public string Name { get; set; }
        public bool Registered { get; set; }
    }
}

次の例では、使用するより複雑な完全なプロジェクト、 JavaScriptSerializer クラスを保存および JSON のシリアル化を使用して、オブジェクトの状態を復元します。 このコードに対して提供されているカスタム コンバーターを使用して、 JavaScriptConverter クラスです。

<%@ Page Language="C#" %>
<%@ Import Namespace="System.Web.Script.Serialization" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

    JavaScriptSerializer serializer;
    protected void Page_Load(object sender, EventArgs e)
    {
        serializer = new JavaScriptSerializer();

        // Register the custom converter.
        serializer.RegisterConverters(new JavaScriptConverter[] { 
            new System.Web.Script.Serialization.CS.ListItemCollectionConverter() });
        this.SetFocus(TextBox1);
    }

    protected void saveButton_Click(object sender, EventArgs e)
    {
        // Save the current state of the ListBox control.
        SavedState.Text = serializer.Serialize(ListBox1.Items);
        recoverButton.Enabled = true;
        Message.Text = "State saved";
    }

    protected void recoverButton_Click(object sender, EventArgs e)
    {        
        //Recover the saved items of the ListBox control.
        ListItemCollection recoveredList = serializer.Deserialize<ListItemCollection>(SavedState.Text);
        ListItem[] newListItemArray = new ListItem[recoveredList.Count];
        recoveredList.CopyTo(newListItemArray, 0);
        ListBox1.Items.Clear();
        ListBox1.Items.AddRange(newListItemArray);
        Message.Text = "Last saved state recovered.";
    }

    protected void clearButton_Click(object sender, EventArgs e)
    {
        // Remove all items from the ListBox control.
        ListBox1.Items.Clear();
        Message.Text = "All items removed";
    }

    protected void ContactsGrid_SelectedIndexChanged(object sender, EventArgs e)
    {
        // Get the currently selected row using the SelectedRow property.
        GridViewRow row = ContactsGrid.SelectedRow;

        // Get the ID of item selected.
        string itemId = ContactsGrid.DataKeys[row.RowIndex].Value.ToString();                
        ListItem newItem = new ListItem(row.Cells[4].Text, itemId);

        // Check if the item already exists in the ListBox control.
        if (!ListBox1.Items.Contains(newItem))
        {
            // Add the item to the ListBox control.
            ListBox1.Items.Add(newItem);
            Message.Text = "Item added";
        }
        else
            Message.Text = "Item already exists";
    }

    protected void ContactsGrid_PageIndexChanged(object sender, EventArgs e)
    {
        //Reset the selected index.
        ContactsGrid.SelectedIndex = -1;
    }

    protected void searchButton_Click(object sender, EventArgs e)
    {
        //Reset indexes.
        ContactsGrid.SelectedIndex = -1;
        ContactsGrid.PageIndex = 0;

        //Set focus on the TextBox control.
        ScriptManager1.SetFocus(TextBox1);
    }

    protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
    {
        // Show/hide the saved state string.        
        SavedState.Visible = CheckBox1.Checked;
        StateLabel.Visible = CheckBox1.Checked;
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Save/Recover state</title>
    <style type="text/css">
        body {  font: 11pt Trebuchet MS;
                font-color: #000000;
                padding-top: 72px;
                text-align: center }

        .text { font: 8pt Trebuchet MS }
    </style>
</head>
<body>    
    <form id="form1" runat="server" defaultbutton="searchButton" defaultfocus="TextBox1">
        <h3>
            <span style="text-decoration: underline">
                                    Contacts Selection</span><br />
        </h3>
        <asp:ScriptManager runat="server" ID="ScriptManager1" />
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
                Type contact's first name:
                <asp:TextBox ID="TextBox1" runat="server" />
                <asp:Button ID="searchButton" runat="server" Text="Search" OnClick="searchButton_Click" />&nbsp;
                <br />
                <br />
                <table border="0" width="100%">
                    <tr>
                        <td style="width:50%" valign="top" align="center">
                            <b>Search results:</b><br />
                            <asp:GridView ID="ContactsGrid" runat="server" AutoGenerateColumns="False"
                                CellPadding="4" DataKeyNames="ContactID" DataSourceID="SqlDataSource1"
                                OnSelectedIndexChanged="ContactsGrid_SelectedIndexChanged" ForeColor="#333333" GridLines="None" AllowPaging="True" PageSize="7" OnPageIndexChanged="ContactsGrid_PageIndexChanged">
                                <Columns>
                                    <asp:CommandField ShowSelectButton="True" ButtonType="Button" />
                                    <asp:BoundField DataField="ContactID" HeaderText="ContactID" SortExpression="ContactID" Visible="False" />
                                    <asp:BoundField DataField="FirstName" HeaderText="FirstName" SortExpression="FirstName" />
                                    <asp:BoundField DataField="LastName" HeaderText="LastName" SortExpression="LastName" />
                                    <asp:BoundField DataField="EmailAddress" HeaderText="EmailAddress" SortExpression="EmailAddress" />
                                </Columns>
                                <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
                                <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                                <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
                                <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                                <EditRowStyle BackColor="#999999" />
                                <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
                                <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
                                <EmptyDataTemplate>No data found.</EmptyDataTemplate>
                            </asp:GridView>
                            <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:AdventureWorksConnectionString %>"
                                SelectCommand="SELECT ContactID, FirstName, LastName, EmailAddress FROM Person.Contact WHERE (UPPER(FirstName) = UPPER(@FIRSTNAME))" >
                                <SelectParameters>
                                    <asp:ControlParameter Name="FIRSTNAME" ControlId="TextBox1" Type="String" />
                                </SelectParameters>
                            </asp:SqlDataSource>
                        </td>
                        <td valign="top">
                            <b>Contacts list:</b><br />
                        <asp:ListBox ID="ListBox1" runat="server" Height="200px" Width="214px" /><br />
                        <asp:Button ID="saveButton" runat="server" Text="Save state" OnClick="saveButton_Click" ToolTip="Save the current state of the list" />
                        <asp:Button ID="recoverButton" runat="server" Text="Recover saved state" OnClick="recoverButton_Click" Enabled="false" ToolTip="Recover the last saved state" />
                        <asp:Button ID="clearButton" runat="server" Text="Clear" OnClick="clearButton_Click" ToolTip="Remove all items from the list" /><br />
                            <br />
                            <asp:CheckBox ID="CheckBox1" runat="server" Checked="True" OnCheckedChanged="CheckBox1_CheckedChanged"
                                Text="Show saved state" AutoPostBack="True" /></td>
                    </tr>
                    <tr>
                        <td colspan="2">
                            <br />
                            <br />
                            &nbsp;&nbsp;
                            <hr />
                            Message: <asp:Label ID="Message" runat="server" ForeColor="SteelBlue" />&nbsp;&nbsp;<br />
                            <asp:Label ID="StateLabel" runat="server" Text="State:"></asp:Label>
                            <asp:Label ID="SavedState" runat="server"/><br />                        
                        </td>
                    </tr>
                </table>
            </ContentTemplate>
        </asp:UpdatePanel>
        <asp:UpdateProgress ID="UpdateProgress1" runat="server">
            <ProgressTemplate>
                <asp:Image ID="Image1" runat="server" ImageUrl="..\images\spinner.gif" />&nbsp;Processing...
            </ProgressTemplate>
        </asp:UpdateProgress>
    </form>
</body>
</html>

.NET Framework
3.5 以降で使用可能

この型のパブリック static (Visual Basic では Shared ) メンバーはスレッド セーフです。インスタンス メンバーの場合は、スレッド セーフであるとは限りません。

System.Web.Script.Serialization 名前空間
Using Web Services in ASP.NET AJAX
Calling Web Services from Client Script in ASP.NET AJAX

トップに戻る
表示: