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

超適当に書いたコードで、まだバグあるかと思います。
ドライブレターなんて文字列なのに引用符で囲ってないとか、他色々

■コード(aspx)

<%@ Page Language="C#" CodeBehind="Default.aspx.cs" Inherits="GetDiscSizeAjax._Default" %>


■コード(aspx.cs)

using System;
using System.IO;
using System.Collections.Generic;
using System.Diagnostics;
using System.Web;
using System.Web.Configuration;
using System.Web.UI;
using System.Text;

namespace GetDiscSizeAjax
{
    public partial class _Default : System.Web.UI.Page
    {
        private static List<DriveType> GetDriveTypes()
        {
            var dts = WebConfigurationManager.AppSettings["DriveTypes"];
            if (string.IsNullOrEmpty(dts)) return null;

            var list = new List<DriveType>();
            foreach(var str in dts.Split(',')){
                DriveType? item = null;
                try
                {
                    item = (DriveType)Enum.Parse(typeof(DriveType), str);
                }
                catch { }
                if (item.HasValue)
                {
                    list.Add(item.Value);
                }
            }
            return list;
        }

        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("DriveLetter:{0}", item.Name);
                    sb.AppendFormat(",Size:{0}", item.TotalSize);
                    sb.AppendFormat(",TotalSize:{0}", (item.TotalSize - item.TotalFreeSpace));
                    sb.AppendFormat(",TotalFreeSpace:{0}", item.TotalFreeSpace);
                    sb.AppendFormat(",Rate:{0}", c);
                    sb.Append("}");

                    loop++;
                }
            }

            sb.Append("]");

            return sb.ToString();
        }

        protected override void Render(HtmlTextWriter writer)
        {
            // 既存レンダリングをOFFにする。
            //base.Render(writer);

            var str = "";
            try
            {
                str = GetDriveSize();
            }
            catch (Exception ex)
            {
                str = string.Format("{ErrorInfo:{0}}", ex.ToString());
            }
            writer.WriteLine(str);
        }
    }
}

■web.config

<?xml version="1.0"?>
<!--
  ASP.NET アプリケーションを構成する方法の詳細については、
  http://go.microsoft.com/fwlink/?LinkId=169433 を参照してください
  -->
<configuration>
	<appSettings>
		<add key="DriveTypes" value="Fixed,bb"/>
	</appSettings>
	<system.web>
		<trace enabled="true" localOnly="false"/>
		<compilation debug="true"/></system.web>
</configuration>


■実行結果

[{DriveLetter:C:\,Size:243476480000,TotalSize:85621563392,TotalFreeSpace:157854916608,Rate:64.83}]