Jeg har selv en løsning godt nok til noget Ajax / jQuery, men her benytter jeg Json som i mange tilfælde fylder mindre end XML og er faktisk utrolig nemt at arbejde med, måske kan du bruge nedenstående funktioner:
public static string JsonCreate<T>(T serializableObject, bool doEncode) where T : class { var serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(T)); var ms = new MemoryStream(); serializer.WriteObject(ms, serializableObject); var json = Encoding.UTF8.GetString(ms.ToArray()); return doEncode ? HttpUtility.HtmlEncode(json) : json; }
public static T JsonParse<T>(string jsonData, bool doDecode) where T : class { if (doDecode) jsonData = HttpUtility.HtmlDecode(jsonData); using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonData))) { var serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(T)); return serializer.ReadObject(ms) as T; } }
Hold da op.. Mange tak for alle ideerne. Det lyder til at det nemmest vil være at returnere en string i stedet, så det har jeg ændret webservicen til.
Det jeg egentlig skal bruge det til er; Idag laver jeg SQL kaldet direkte fra klienten og looper igennem resultat rows og gør forskellige ting, med dette:
SqlDataReader dataReaderCopy = FunctionSqlDataReader(connectionString, "SELECT * FROM Jobs_Copy"); if (dataReaderCopy != null && dataReaderCopy.HasRows) { while (dataReaderCopy.Read()) ...DO STUFF
..og det virker fint. Men i stedet ville jeg gerne bruge webservices, så logikken kan ændres/opdateres ét sted i stedet for i selve klienten.
Jeg har nu ændret webservicen så den returnerer string:
[WebMethod(Description = "It will fetch copy jobs from SQL database.")] public string GetCopyJobs() { string sqlStr = "SELECT * FROM Jobs_Copy"; SqlConnection conn = new SqlConnection(connectionString); DataSet dsCopyJobs = new DataSet(); SqlDataAdapter daCopyJobs = new SqlDataAdapter(sqlStr, conn); daCopyJobs.Fill(dsCopyJobs);
XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(dsCopyJobs.GetXml()); string result = xmlDoc.InnerXml; return result; }
XmlDocument doc = new XmlDocument(); doc.LoadXml(wsDoc); }
Altså er resultatet pt i et XmlDocument.
Hvordan kan jeg derfra "loope" gennem noderne ligesom jeg hidtil har gjort med "while (dataReaderCopy.Read())" hvor jeg har kunnet bruge DB indholdet ved dataReaderCopy[1].ToString(), dataReaderCopy[2].ToString() osv?
Beklager at den ikke er sevet ind, har ikke helt fanget logikken endnu :-/
'System.Collections.Generic.IEnumerable<System.Xml.Linq.XElement>' does not contain a definition for 'Select' and no extension method 'Select' accepting a first argument of type 'System.Collections.Generic.IEnumerable<System.Xml.Linq.XElement>' could be found (are you missing a using directive or an assembly reference?)
I usings har jeg pt:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data.SqlClient; using System.Data; using System.Diagnostics; using System.Drawing; using System.IO; using System.Runtime.InteropServices; using System.Web.Services; using System.Windows.Forms; using System.Xml; using System.Xml.Linq; using Microsoft.Win32;
Hah, ja ... det kan man vist godt sige jeg var :-)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.