2

JSON.netライブラリを使用してこのJSON文字列を解析するために考えられるすべてのことを試しましたが、「文字列の逆シリアル化後の追加のテキスト」というエラーが表示され続けます。何がうまくいかないのか、誰にも考えがありますか?

これが私が持っているJSON文字列です:

{"w_vendor":["914115361","914115361","914115361","914115361","914115361","914115361","914115361","914115361","914115361","914115361","914115361","914115361","914115361","914115361","914115361","914115361","914115361","914115361","914115361","914115361","914115361","914115361","914115361","914115361","914115361","914115361","914115361","914115361","914115361","914115361","914115361","914115361","914115361","914115361","914115361","914115361"]}

これを解析するために使用しているコードは次のとおりです。

var pdfValue = Request["pdfValue"];
string OutputCacheLocation = JsonConvert.SerializeObject(pdfValue);
DataSet dataset = JsonConvert.DeserializeObject<DataSet>(pdfValue);

DataTable datatable = dataset.Tables["table1"];

Response.Write(datatable.Rows.Count);

エラーが参照している追加のテキストを見た人はいますか? 私はそれを見ることができず、JSON は解析されません。私はあきらめて、自分で手動で解析する準備ができています。

4

1 に答える 1

3

に逆シリアル化する代わりにDataSet、データのカスタム クラスを作成し、代わりにそのクラスに逆シリアル化することを検討しましたか? もう少し簡単に操作できるかもしれません。

たとえば、次のようにクラスを定義するとします。

class Data
{
    [JsonProperty(PropertyName="w_vendor")]
    public List<string> Values { get; set; }
}

次に、次のように逆シリアル化できます。

string json = @"{""w_vendor"":[""914115361"",""914115361"",""914115361"",""914115361"",""914115361"",""914115361"",""914115361"",""914115361"",""914115361"",""914115361"",""914115361"",""914115361"",""914115361"",""914115361"",""914115361"",""914115361"",""914115361"",""914115361"",""914115361"",""914115361"",""914115361"",""914115361"",""914115361"",""914115361"",""914115361"",""914115361"",""914115361"",""914115361"",""914115361"",""914115361"",""914115361"",""914115361"",""914115361"",""914115361"",""914115361"",""914115361""]}";

var data = JsonConvert.DeserializeObject<Data>(json);

Response.Write(data.Values.Count);

編集

あなたが持っていたように機能しなかった理由は、あなたのデータがDataSet. ドキュメントの例を見ると、データは次のように構造化する必要があります。

{
    "table1" : 
    [
        {
            "column1" : "value1",
            "column2" : "value2"
        },
        {
            "column1" : "value3",
            "column2" : "value4"
        }            
    ],
    "table2" : 
    [
        {
            "column1" : "value1",
            "column2" : "value2"
        },
        {
            "column1" : "value3",
            "column2" : "value4"
        }            
    ]
}

具体的には、外側のオブジェクトにはテーブルを表すプロパティが含まれています。プロパティ名はテーブルの名前に対応し、値はオブジェクトの配列であり、各オブジェクトはテーブル内の 1 つの行を表します。オブジェクトのプロパティは列名に対応し、それらの値は行データです。

データの外側のオブジェクトには、値がオブジェクトではなく単純な文字列の配列であるプロパティが含まれています。したがって、JSON.NET は列名を判別できないため、これをテーブルに変換することはできません。また、データのテーブルの名前はw_vendorではなく になりtable1ます。

于 2013-07-18T05:09:24.167 に答える