C# WebService中將集合資料轉化為字串(json,xml )的方式
阿新 • • 發佈:2019-01-25
在寫webservice的時候需要將從資料庫中查詢出的資料(各種集合)轉化為json字串。
如果在取出集合後再對集合進行遍歷,拼接成xml就太麻煩了。
所以首先介紹一下通過標準方法自動轉為json字串。
方法一:
首先需要引入:Newtonsoft.Json.dl (下載地址在我個人上傳的資源中有,可以檢視下載)
之後新增引用: using Newtonsoft.Json;
轉化時的程式碼如下:
RetrieveMultipleRequest fetchRequest1 = new RetrieveMultipleRequest
{
Query = new FetchExpression(fetchXml)
};
//執行fetchXml
EntityCollection returnCollection = ((RetrieveMultipleResponse)webService.GetOrgServiceByUserPwd(userName, pwd).Execute(fetchRequest1)).EntityCollection;
//轉換為JDSON(將查詢到的集合轉為Json)
jsonString = JsonConvert.SerializeObject(returnCollection);
直接將jsonString返回就可以了,這樣其他呼叫該介面的方法自動解析就好了。
如果不用這種方法的話也可以
方法二:將集合轉化為xml字串
/// <summary>
/// 獲取機構列表
/// </summary>
/// <param name="PageIndex">頁數</param>
/// <param name="PageSize">每頁條數</param>
/// <returns>XML</returns>
[WebMethod]
public XmlElement GetAllAccount (int PageIndex, int PageSize, string doUsername, string type, string name, int codetype)
{
XElement result = new XElement("Result");
XElement seach = new XElement("Accounts");
DataTable DTAccount = bf.getAllAccountList(doUsername, type, name, codetype);
DataTable acc = bf.GetPagedTable(DTAccount, PageIndex, PageSize);
if (acc.Rows.Count > 0)
{
seach.Add(
from d in acc.AsEnumerable()
select new XElement("Account",
new XElement("Name", d.Field<string>("Name")),
new XElement("AccountId", d.Field<Guid>("AccountId").ToString()),
new XElement("Type", d.Field<string>("new_accounttype")),
new XElement("Area", d.Field<string>("TerritoryIdName"))
));
seach.Add(new XElement("Count", DTAccount.Rows.Count));
}
else
{
seach.Add(new XElement("Return", 0));
}
result.Add(seach);
XmlDocument doc = new XmlDocument();
doc.LoadXml(result.ToString(SaveOptions.DisableFormatting));
return doc.DocumentElement;
}
其中第一種方法將從資料庫中查詢出的資料直接轉化,這樣的話資料會比較亂,但是對於webService的開發者而言則比較容易,因為直接轉化就可以了。
第二種方法返回的資料結構上比較工整,方便其他人員呼叫,但是對於webService的開發者而言則工作量大一些。