5

Net 3.5 で JavaScriptSerializer を使用して、次の JSON 構造を生成しようとしています。

{
    "chart": "pie",
    "series": [
        {
            "name": "Browsers",
            "data": [
                [
                    "Firefox",
                    6
                ],
                [
                    "MSIE",
                    4
                ]
            ],
            "size": "43%"
        }
    ]
}

私が直面している問題は、データセクションに関するものです。dataの上記の構造にシリアル化するクラスを作成できないようです。

主題に触れる他の投稿を読みましたが、解決策は常にJSON.Netを使用することです。たとえば、JavaScriptSerializer を使用して辞書をシリアライズします。ただし、JavaScriptSerializer または .Net 3.5 フレームワークのその他の組み込み機能を使用して、主に解決したいと考えています。

データ セクションを作成するにはどうすればよいですか?

*EDIT JavaScriptSerializer でこれを解決する方法は、シリアライズしようとしているオブジェクトのデータ プロパティのオブジェクト配列を作成することです。

入力パラメータデータは「Firefox:6\nMSIE:4\nChrome:7」です。

public object[] GetData(string data) { var dataStrArr = data.Split(new[] { Environment.NewLine }, StringSplitOptions.None);

        var dataArr = new object[dataStrArr.Length];

        for (var index = 0; index < dataStrArr.Length; index++)
        {
            var component = dataStrArr[index];
            var componentArr = component.Split(':');
            if (componentArr.Length != 2)
                continue;

            var key = componentArr[0];
            decimal value;

            if (decimal.TryParse(componentArr[1], out value))
            {
                var keyValueArr = new object[2];
                keyValueArr[0] = key;
                keyValueArr[1] = value;

                dataArr[index] = keyValueArr;
            }
        }

        return dataArr;
    }
4

1 に答える 1

1

それをシリアル化するには、次のクラス(RootObject)のようなものが必要だと思います:

public class Series
{
  public string name { get; set; }
  public List<List<object>> data { get; set; }
  public string size { get; set; }
}

public class RootObject
{
  public string chart { get; set; }
  public List<Series> series { get; set; }
}

それが役立つかどうか教えてください。

于 2015-12-15T16:59:06.010 に答える