亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從具有父/子關系的 C# 數據集動態創建 Json

從具有父/子關系的 C# 數據集動態創建 Json

C#
繁花不似錦 2022-07-23 17:42:00
我想編寫一個簡單的應用程序,從數據庫中獲取數據并將其格式化為 Json 文件。問題是,我從中獲取數據的視圖應該是可變的。這意味著無法從根類序列化 Json。此外,我需要確保表是否有父/子連接,這也被描述了。在下面的代碼中,我創建了一個數據集,讓您了解我的意思。        static void Main(string[] args)    {        DataSet dsSet = new DataSet("OrderManagement");        DataTable tCustumer = new DataTable("Custumer");        DataTable tOrder = new DataTable("Order");        tCustumer.Columns.Add("CustumerId");        tCustumer.Columns.Add("Name");        tOrder.Columns.Add("OrderId");        tOrder.Columns.Add("CustumerId");        tOrder.Columns.Add("Article");        tCustumer.Rows.Add("1", "Chris");        tCustumer.Rows.Add("2", "Ronja");        tCustumer.Rows.Add("3", "Thomas");        tOrder.Rows.Add("1", "1", "chocolate");        tOrder.Rows.Add("2", "1", "apples");        tOrder.Rows.Add("3", "2", "dogfood");        tOrder.Rows.Add("4", "3", "keyboard");        tOrder.Rows.Add("4", "3", "tomatos");        tOrder.Rows.Add("4", "3", "green tea");        dsSet.Tables.Add(tCustumer);        dsSet.Tables.Add(tOrder);        dsSet.Relations.Add(            "RelationCustumerOrder",            dsSet.Tables["Custumer"].Columns["CustumerId"],            dsSet.Tables["Order"].Columns["CustumerId"], false            );        dsSet.AcceptChanges();        JsonSerializerSettings settings = new JsonSerializerSettings();        settings.TypeNameHandling = TypeNameHandling.All;        string text = JsonConvert.SerializeObject(dsSet, Formatting.Indented, settings);    }這是我希望它輸出的 Json:{"Custumer": [{  "CustumerId": "1",  "Name": "Chris"    "Order": [    {      "OrderId": "1",      "CustumerId": "1",      "Article": "chocolate"    },    {      "OrderId": "2",      "CustumerId": "1",      "Article": "apples"    },    ]},{  "CustumerId": "2",  "Name": "Ronja"    "Order": [    {      "OrderId": "3",      "CustumerId": "2",      "Article": "dogfood"    }    ]},{  "CustumerId": "3",  "Name": "Thomas"    "Order": [    {      "OrderId": "4",      "CustumerId": "3",      "Article": "keyboard"    },
查看完整描述

1 回答

?
呼喚遠方

TA貢獻1856條經驗 獲得超11個贊

您可以通過幾個步驟完成此操作。


第 1 步:將 Relation.Nested 屬性設置為 True。


dsSet.Relations.Add(

    "RelationCustumerOrder",

    dsSet.Tables["Custumer"].Columns["CustumerId"],

    dsSet.Tables["Order"].Columns["CustumerId"]

    );

dsSet.Relations[0].Nested = true;  

第 2 步:轉換為 Xml。


StringWriter sw = new StringWriter();

dsSet.WriteXml(sw);

string xmlString = sw.ToString();

第 3 步:序列化為 Json 以獲得最終結果


XmlDocument doc = new XmlDocument();

doc.LoadXml(xmlString);

JsonSerializerSettings settings = new JsonSerializerSettings();

settings.TypeNameHandling = TypeNameHandling.All;


string jsonResult = JsonConvert.SerializeXmlNode(doc, Newtonsoft.Json.Formatting.Indented);

樣本的最終輸出將是


{

  "OrderManagement": {

    "Custumer": [

      {

        "CustumerId": "1",

        "Name": "Chris",

        "Order": [

          {

            "OrderId": "1",

            "CustumerId": "1",

            "Article": "chocolate"

          },

          {

            "OrderId": "2",

            "CustumerId": "1",

            "Article": "apples"

          }

        ]

      },

      {

        "CustumerId": "2",

        "Name": "Ronja",

        "Order": {

          "OrderId": "3",

          "CustumerId": "2",

          "Article": "dogfood"

        }

      },

      {

        "CustumerId": "3",

        "Name": "Thomas",

        "Order": [

          {

            "OrderId": "4",

            "CustumerId": "3",

            "Article": "keyboard"

          },

          {

            "OrderId": "4",

            "CustumerId": "3",

            "Article": "tomatos"

          },

          {

            "OrderId": "4",

            "CustumerId": "3",

            "Article": "green tea"

          }

        ]

      }

    ]

  }

}


查看完整回答
反對 回復 2022-07-23
  • 1 回答
  • 0 關注
  • 185 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號