ローカルドライブ情報をASP.NETでJSON文字列として出力する。 part.4

JSON = オブジェクトリテラル」と何年間も認識していたため、正しい書式が分からなかっただけでした。
下記のように修正することで動作を確認できた!


ソースコード (aspx.cs) 抜粋

private static string GetDriveSize()
{
    var sb = new StringBuilder();
    var list = GetDriveTypes();

    // 設定ファイルに設定がない場合はローカルディスクのみの情報を取得する。
    if (list == null || list.Count <= 0)
    {
        list = new List<DriveType>();
        list.Add(DriveType.Fixed);
    }

    sb.Append("[");

    var loop = 0;
    var infos = DriveInfo.GetDrives();
    foreach (var item in infos)
    {
        // HDDの種類でフィルタリングする
        if (list.Exists(x => x == item.DriveType))
        {
            var a = new Decimal(item.TotalFreeSpace);
            var b = new Decimal(item.TotalSize);
            var c = (a / b) * 100;
            c = Decimal.Round(c, 2);

            // HDDの情報を設定
            if (0 < loop)
            {
                sb.Append(",");
            }
            sb.Append("{");
            sb.AppendFormat("\"dl\":\"{0}\"", item.Name.Replace(":\\", ""));            //DriveLetter
            sb.AppendFormat(",\"s\":{0}"    , item.TotalSize);                          //Size
            sb.AppendFormat(",\"ts\":{0}"   , (item.TotalSize - item.TotalFreeSpace));  //TotalSize
            sb.AppendFormat(",\"tfs\":{0}"  , item.TotalFreeSpace);                     //TotalFreeSpace
            sb.AppendFormat(",\"r\":{0}"    , c);                                       //Rate
            sb.Append("}");

            loop++;
        }
    }

    sb.Append("]");

    return sb.ToString();
}


ソースコード (js)

var action_ajax = function (target, url) {
    // 対象のタグが存在していること、且つAjax通信中出ないこと
    if (target && (this.ajax !== true)) {
        // 多重送信防止用のフラグ
        this.ajax = true;
        var call_obj = this;

        $.ajax({
            url: url
            , cache: false
            , dataType: "json"
            , success: function (json, status, xhr) {

                var html = '<table>';
                html += '<tr>';
                html += '<th>ドライブレター</th>';
                html += '<th>容量</th>';
                html += '<th>使用量</th>';
                html += '<th>空き容量</th>';
                html += '<th>比率</th>';
                html += '</tr>';

                for (var cnt = 0; cnt < json.length; cnt++) {
                    var item = json[cnt];
                    html += '<tr>';
                    html += '<td>' + item.dl + '</td>';
                    html += '<td>' + item.s + '</td>';
                    html += '<td>' + item.ts + '</td>';
                    html += '<td>' + item.tfs + '</td>';
                    html += '<td>' + item.r + '</td>';
                    html += '</tr>';
                }
                html += '</table>';
                $(target).html(html);
            }
            , complete: function (xhr, status) {
                // 処理完了後は送信フラグをOFFにする。
                call_obj.ajax = false;

                if (status != "success") {
                    $(target).html("Ajaxエラー: " + status);
                }
            }
        });
    }
}
$(window).load(function () {
    action_ajax("#view", "Default.aspx");
});

_