6

Web サービスを使用して C# アプリケーションを作成しています。私の Web サービスでは、JSONStringデータを使用しています。しかし、この文字列をDataSet.

JSONStringは:

{
    "Table": [
        {
            "DisplayVoucherNumber": "A101239Z",
            "ActualDate": "08/07/2013",
            "AccountName": "shyamal",
            "Pcs": "50",
            "Weight": "500.000"
        }
    ],
    "Table1": [
        {
            "DisplayVoucherNumber": "R101249B",
            "ActualDate": "11/07/2013",
            "AccountName": "vipul",
            "NetWeight": "90.000",
            "Weight": "80.000",
            "Difference": "10.000"
        },
        {
            "DisplayVoucherNumber": "R101249B",
            "ActualDate": "11/07/2013",
            "AccountName": "vipul",
            "NetWeight": "500.000",
            "Weight": "100.000",
            "Difference": "400.000"
        }
    ]
}
4

6 に答える 6

15

あなたの質問はあまり明確ではありません。あなたがやりたいことは、デシリアライズ後にデータセットにマップできるオブジェクトを取り戻すことだと思います。何かのようなもの

DataSet myDataSet= JsonConvert.DeserializeObject<DataSet>(jsonstring)

そして、データセットを使用してコーディングを続けます。データセット内のデータテーブルにアクセスするようなものです。

それがあなたが達成したいことであり、以前の回答で示唆されているように独自の POCO を使用したくない場合。前に Typed DataSet を作成する必要がある場合があります

XML スキーマ定義言語 (XSD) 標準に準拠する XML スキーマがあれば、Windows ソフトウェア開発キット (SDK) で提供される XSD.exe ツールを使用して、厳密に型指定された DataSet を生成できます。 厳密に型指定されたデータセットの詳細

これにより、Deserialize メソッドを使用して厳密に型指定されたデータセットを使用できるようになります。

XML スキーマで JSON 構造を模倣する必要があることに注意してください。最後に JSON 構造と互換性のあるものにするためです。

于 2013-10-02T14:31:11.470 に答える
13

@Dhavalの回答を使用して動的C#ソリューション(デシリアライズするオブジェクト構造がわからない場合)として、メソッドを無効にした後、Deserialize<>()以下のメソッドを使用してそれを行います:

更新:DataSet.ReadXmlXMLノードを次のように読み取る際にいくつかのオプションがありますXmlReadMode

private static DataSet ReadDataFromJson(string jsonString, XmlReadMode mode = XmlReadMode.Auto)
{
    //// Note:Json convertor needs a json with one node as root
    jsonString = $"{{ \"rootNode\": {{{jsonString.Trim().TrimStart('{').TrimEnd('}')}}} }}";
    //// Now it is secure that we have always a Json with one node as root 
    var xd = JsonConvert.DeserializeXmlNode(jsonString);

    //// DataSet is able to read from XML and return a proper DataSet
    var result = new DataSet();
    result.ReadXml(new XmlNodeReader(xd), mode);
    return result;
}

たとえば、データから厳密に型指定されたスキーマを推測する場合:

var dataset = ReadDataFromJson(yourString, XmlReadMode.InferTypedSchema);
于 2015-12-15T11:25:26.303 に答える
1
Private Function convertJsonStringToDataSet(jsonString As String) As DataSet
    Dim xd As New XmlDocument()
    jsonString = "{ ""rootNode"": {" + jsonString.Trim().TrimStart("{"c).TrimEnd("}"c) + "} }"
    xd = DirectCast(Newtonsoft.Json.JsonConvert.DeserializeXmlNode(jsonString), XmlDocument
    Dim ds As New DataSet()
    ds.ReadXml(New XmlNodeReader(xd))
    Return ds
End Function
于 2015-03-27T05:45:40.667 に答える
0
  1. 逆シリアル化されたデータのクラスを作成します。

  2. 使用:

    YourClass yourObject = JsonConvert.DeserializeObject<YourClass>(jsonStr);
    
于 2013-10-02T14:06:16.970 に答える