RPCclient.cs
*******************************************
using System;
using System.IO;
using System.Net;
using System.Text;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace JsonRPCclient {
public class JsonRPCclient {
private int id = 0;
///
/// Set JSON-RPC webservice URL
///
public string URL { set; get; }
///
/// Set JSON-RPC method
///
public string Method { set; get; }
///
/// Add JSON-RPC params
///
public JObject Parameters { set; get; }
///
/// Results of the request
///
public JsonRPCresponse Response { set; get; }
///
/// Create a new object of RPCclient
///
public JsonRPCclient() {
Parameters = new JObject();
Response = null;
}
///
/// Create a new object of RPCclient
///
///
public JsonRPCclient(string URL) {
this.URL = URL;
Parameters = new JObject();
Response = null;
}
///
/// POST the request and returns server response
///
///
public string Post() {
try {
JObject jobject = new JObject();
jobject.Add(new JProperty("jsonrpc", "2.0"));
jobject.Add(new JProperty("id", ++id));
jobject.Add(new JProperty("method", Method));
jobject.Add(new JProperty("params", Parameters));
string PostData = JsonConvert.SerializeObject(jobject);
UTF8Encoding encoding = new UTF8Encoding();
byte[] bytes = encoding.GetBytes(PostData);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
request.Method = "POST";
request.ContentType = "application/json";
request.KeepAlive = true;
request.ContentLength = bytes.Length;
Stream writeStream = request.GetRequestStream();
writeStream.Write(bytes, 0, bytes.Length);
writeStream.Close();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader readStream = new StreamReader(responseStream, Encoding.UTF8);
Response = new JsonRPCresponse();
Response = JsonConvert.DeserializeObject(readStream.ReadToEnd());
Response.StatusCode = response.StatusCode;
return Response.ToString();
}
catch (Exception e) {
return e.ToString();
}
}
public void ClearParameters() {
this.Parameters = new JObject();
}
}
public class JsonRPCresponse {
public int id { set; get; }
public object result { set; get; }
public string error { set; get; }
public HttpStatusCode StatusCode { set; get; }
public JsonRPCresponse() { }
public override string ToString() {
return "{\"id\":" + id.ToString() + ",\"result\":\"" + result.ToString() + "\",\"error\":" + error + ((String.IsNullOrEmpty(error)) ? "null" : "\"" + error + "\"") + "}";
}
}
}
***********************
program.cs
*******************************************
string Baseurl = "http://localhost/limesurvey/index.php/admin/remotecontrol";
JsonRPCclient client = new JsonRPCclient(Baseurl);
client.Method = "get_session_key";
client.Parameters.Add("username", "admin");
client.Parameters.Add("password", "mypassword");
client.Post();
string SessionKey = client.Response.result.ToString();
client.ClearParameters();
if(client.Response.StatusCode == System.Net.HttpStatusCode.OK){
client.Method = "import_survey";
client.Parameters.Add("sSessionKey", SessionKey);
client.Parameters.Add("sImportData", Base64Encode(yourImportDataString));
client.Parameters.Add("sImportDataType", "lss");
//client.Parameters.Add("sNewSurveyName", "test");
//client.Parameters.Add("DestSurveyID", 999333);
client.Post();
}
client.ClearParameters();
Console.WriteLine("new survey id:" + client.Response.result.ToString());
Console.ReadLine();