public void WriteEmptyArray() { var writer = new JsonTextWriter(new StringWriter()); writer.WriteStringArray(); Assert.AreEqual("[]", writer.ToString()); }
public void WriteArray() { var writer = new JsonTextWriter(new StringWriter()); writer.WriteStringArray(new object[] { 123, "Hello \"Old\" World", true }); Assert.AreEqual("[\"123\",\"Hello \\\"Old\\\" World\",\"True\"]", writer.ToString()); }
public void WriteEmptyArray() { JsonTextWriter writer = new JsonTextWriter(new StringWriter()); writer.WriteStringArray(new string[0]); Assert.AreEqual("[]", writer.ToString()); }
public void WriteArray() { JsonTextWriter writer = new JsonTextWriter(new StringWriter()); writer.WriteStringArray(new object[] { 123, "Hello \"Old\" World", true }); Assert.AreEqual("[\"123\",\"Hello \\\"Old\\\" World\",\"True\"]", writer.ToString()); }
private static void Version1(ServiceClass service, Uri url, IndentedTextWriter writer) { Debug.Assert(service != null); Debug.Assert(url!= null); Debug.Assert(!url.IsFile); Debug.Assert(writer != null); writer.WriteLine("// Proxy version 1.0"); writer.WriteLine(); writer.Write("function "); writer.Write(service.Name); writer.WriteLine("(url)"); writer.WriteLine("{"); writer.Indent++; Method[] methods = service.GetMethods(); string[] methodNames = new string[methods.Length]; for (int i = 0; i < methods.Length; i++) { Method method = methods[i]; methodNames[i] = method.Name; if (method.Description.Length > 0) { // TODO: What to do if /* and */ appear in the summary? writer.Write("/* "); writer.Write(method.Description); writer.WriteLine(" */"); writer.WriteLine(); } writer.Write("this[\""); writer.Write(method.Name); writer.Write("\"] = function("); Parameter[] parameters = method.GetParameters(); foreach (Parameter parameter in parameters) { writer.Write(parameter.Name); writer.Write(", "); } writer.WriteLine("callback)"); writer.WriteLine("{"); writer.Indent++; writer.Write("return call(\""); writer.Write(method.Name); writer.Write("\", ["); foreach (Parameter parameter in parameters) { if (parameter.Position > 0) writer.Write(','); writer.Write(' '); writer.Write(parameter.Name); } writer.WriteLine(" ], callback);"); writer.Indent--; writer.WriteLine("}"); writer.WriteLine(); } writer.Write("var url = typeof(url) === 'string' ? url : '"); writer.Write(url); writer.WriteLine("';"); writer.WriteLine(@"var self = this; var nextId = 0; function call(method, params, callback) { var request = { id : nextId++, method : method, params : params }; return callback == null ? callSync(method, request) : callAsync(method, request, callback); } function callSync(method, request) { var http = newHTTP(); http.open('POST', url, false, self.httpUserName, self.httpPassword); setupHeaders(http, method); http.send(JSON.stringify(request)); if (http.status != 200) throw { message : http.status + ' ' + http.statusText, toString : function() { return message; } }; var response = JSON.eval(http.responseText); if (response.error != null) throw response.error; return response.result; } function callAsync(method, request, callback) { var http = newHTTP(); http.open('POST', url, true, self.httpUserName, self.httpPassword); setupHeaders(http, method); http.onreadystatechange = function() { http_onreadystatechange(http, callback); } http.send(JSON.stringify(request)); return request.id; } function setupHeaders(http, method) { http.setRequestHeader('Content-Type', 'text/plain; charset=utf-8'); http.setRequestHeader('X-JSON-RPC', method); } function http_onreadystatechange(sender, callback) { if (sender.readyState == /* complete */ 4) { var response = sender.status == 200 ? JSON.eval(sender.responseText) : {}; response.xmlHTTP = sender; callback(response); } } function newHTTP() { if (typeof(window) != 'undefined' && window.XMLHttpRequest) return new XMLHttpRequest(); /* IE7, Safari 1.2, Mozilla 1.0/Firefox, and Netscape 7 */ else return new ActiveXObject('Microsoft.XMLHTTP'); /* WSH and IE 5 to IE 6 */ }"); writer.Indent--; writer.WriteLine("}"); writer.WriteLine(); writer.Write(service.Name); writer.Write(".rpcMethods = "); JsonTextWriter jsonWriter = new JsonTextWriter(writer); jsonWriter.WriteStringArray(methodNames); writer.WriteLine(";"); }
private static void Version1(ServiceClass service, Uri url, IndentedTextWriter writer) { Debug.Assert(service != null); Debug.Assert(url!= null); Debug.Assert(!url.IsFile); Debug.Assert(writer != null); writer.Write("function "); writer.Write(service.Name); writer.WriteLine("(url)"); writer.WriteLine("{"); writer.Indent++; Method[] methods = service.GetMethods(); string[] methodNames = new string[methods.Length]; for (int i = 0; i < methods.Length; i++) { Method method = methods[i]; methodNames[i] = method.Name; if (method.Description.Length > 0) { // TODO: What to do if summary breaks over several lines? writer.Write("// "); writer.WriteLine(method.Description); writer.WriteLine(); } writer.Write("this[\""); writer.Write(method.Name); writer.Write("\"] = function("); Parameter[] parameters = method.GetParameters(); foreach (Parameter parameter in parameters) { writer.Write(parameter.Name); writer.Write(", "); } writer.WriteLine("callback)"); writer.WriteLine("{"); writer.Indent++; writer.Write("return rpc(new Call(\""); writer.Write(method.Name); writer.Write("\", ["); foreach (Parameter parameter in parameters) { if (parameter.Position > 0) writer.Write(','); writer.Write(' '); writer.Write(parameter.Name); } writer.WriteLine(" ], callback));"); writer.Indent--; writer.WriteLine("}"); writer.WriteLine(); } writer.Write("var url = typeof(url) === 'string' ? url : '"); writer.Write(url); writer.WriteLine("';"); writer.WriteLine(@"var self = this; var nextId = 0; function Call(method, params, callback) { this.url = url; this.callback = callback; this.request = { id : ++nextId, method : method, params : params }; } function rpc(call) { return self.channel != null && typeof(self.channel.rpc) === 'function' ? self.channel.rpc(call) : call; } this.channel = new JayrockChannel(); function JayrockChannel() { this.rpc = function(call) { var async = typeof(call.callback) === 'function'; var xhr = newXHR(); xhr.open('POST', call.url, async, this.httpUserName, this.httpPassword); xhr.setRequestHeader('Content-Type', this.contentType || 'application/json; charset=utf-8'); xhr.setRequestHeader('X-JSON-RPC', call.request.method); if (async) xhr.onreadystatechange = function() { xhr_onreadystatechange(xhr, call.callback); } xhr.send(JSON.stringify(call.request)); call.handler = xhr; if (async) return call; if (xhr.status != 200) throw new Error(xhr.status + ' ' + xhr.statusText); var response = JSON.eval(xhr.responseText); if (response.error != null) throw response.error; return response.result; } function xhr_onreadystatechange(sender, callback) { if (sender.readyState == /* complete */ 4) { var response = sender.status == 200 ? JSON.eval(sender.responseText) : {}; callback(response, sender); } } function newXHR() { if (typeof(window) !== 'undefined' && window.XMLHttpRequest) return new XMLHttpRequest(); /* IE7, Safari 1.2, Mozilla 1.0/Firefox, and Netscape 7 */ else return new ActiveXObject('Microsoft.XMLHTTP'); /* WSH and IE 5 to IE 6 */ } }"); writer.Indent--; writer.WriteLine("}"); writer.WriteLine(); writer.Write(service.Name); writer.Write(".rpcMethods = "); JsonTextWriter jsonWriter = new JsonTextWriter(writer); jsonWriter.WriteStringArray(methodNames); writer.WriteLine(";"); }