如何序列化两个参数Json转换?
Posted
技术标签:
【中文标题】如何序列化两个参数Json转换?【英文标题】:How to serialize two parameter Json convert? 【发布时间】:2017-12-29 17:21:46 【问题描述】:我有一个 xamarin 表单应用程序和一个使用 ASP.net 创建的 REST Web api。 Web api 正在远程服务器上运行。在那个 web api 中,我有用于数据库查询的类。我需要将服务器地址、用户名、密码和数据库名称作为连接字符串从我的 xamarin 应用程序传递到该特定类。如何同时序列化连接字符串和对象?
我的数据库查询
public void addSalesReport(string connstr, SalesReport salesreport)
mysqlConnection myconn = new MySqlConnection(connstr);
string d = salesreport.Date.ToString("yyyy-MM-dd");
String sqlstr = "INSERT INTO salesreport (ID,sDate,ColorCopy,BwCopy,4RPrints,Misc,ExternalOrder,TotalSales,BwWastage,ColorWastage,Remarks) VALUES ('" + salesreport.ID + "','" + d + "'," + salesreport.ColorCopy + "," + salesreport.BwCopy + "," + salesreport.p4rPrint + "," + salesreport.Misc + ","+salesreport.ExternalOrder+","+salesreport.TotalSales+","+salesreport.BwWastage+","+salesreport.ColorWastage+",'"+salesreport.Remarks+"')";
MySqlCommand cmd = new MySqlCommand(sqlstr, myconn);
myconn.Open();
cmd.ExecuteNonQuery();
myconn.Close();
myconn.Dispose();
将数据发布到 Mysql db 的控件
[HttpPost]
[Route("api/SalesReport", Name = "salesReport")]
public void PostUpdate([FromBody]string connstr , SalesReport value)
SalesDBConn db = new SalesDBConn();
db.addSalesReport(connstr, value);
我的 Xamarin 应用程序中的数据服务类
public async void addSalesReport(string connstr, SalesReport salesReport)
var conn = JsonConvert.SerializeObject(connstr);
var contentstr = new StringContent(conn, Encoding.UTF8, "application/json");
var data = JsonConvert.SerializeObject(salesReport);
var content = new StringContent(data, Encoding.UTF8, "application/json");
var response = await client.PostAsync("http://myserverdomain.com/api/SalesReport", contentstr, content);
【问题讨论】:
我在等待 client.PostAsync("myserverdomain.com/api/SalesReport", contentstr, content);无法从 system.net.http.stringContent 转换为 System.Threading,CancellationToken 我没有看到client
对象的类型?它是在addSalesReport
方法之外定义的吗?
是的,它在外面。
【参考方案1】:
首先,我们将不得不引入一个新类,它将充当您的两个输入的包装容器。现在,每当我们序列化类时,两个输入都会一起序列化:
public class DataToPost
public string ConnectionString get; set;
public SalesReport SalesReportData get; set;
然后改addSalesReport
方法如下面代码sn-p所示:
public async void addSalesReport(string connstr, SalesReport salesReport)
HttpClient client = new HttpClient();
var objectDataToPost = new DataToPost ConnectionString = connstr, SalesReportData = salesReport ;
var data = JsonConvert.SerializeObject(objectDataToPost);
var content = new StringContent(data, Encoding.UTF8, "application/json");
var response = await client.PostAsync("http://myserverdomain.com/api/SalesReport", content, CancellationToken.None);
【讨论】:
【参考方案2】:所以您要将连接到您的数据库的字符串嵌入到您的客户端中?这听起来是个非常糟糕的主意。
无论如何,如果您想在一个 HTTP 请求中发送多个数据片段,那么您可以将其包装在一个容器中,该容器包含每个数据片段的成员:
"connectionString" : "just-don't-do-that",
"data" :
// the rest of the data
【讨论】:
这个应用程序会在一个小圈子内使用,客户端需要输入连接字符串,它会保存在一个xml文件中。稍后,来自 xml 文件的数据将用于设置连接字符串。这就是要求。这就是我这样做的原因,还有其他方法吗?【参考方案3】:我同意@CodeCaster,从客户端发送连接字符串真的很糟糕。
要从客户端发送多个参数,我们需要有容器,我的意思是更新您的:
1) 我的 Xamarin 应用程序中的数据服务类
public async void addSalesReport(string connstr, SalesReport salesReport)
var data = connstr: connstr,salesReport:salesReport
var content = new StringContent(data, Encoding.UTF8, "application/json");
var response = await client.PostAsync("http://myserverdomain.com/api/SalesReport", content);
2) 和 Control 将数据发布到 Mysql db
[Route("api/SalesReport", Name = "salesReport")]
public void PostUpdate([FromBody]SalesReportData value)
SalesDBConn db = new SalesDBConn();
db.addSalesReport(value.connectionString, value.SalesReport);
//rename the class
public class SalesReportData
public string connectionString get; set;
public string SalesReport get; set;
希望对你有帮助... :)
【讨论】:
以上是关于如何序列化两个参数Json转换?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 JSON 字符串转换为 URL 参数(GET 请求)?
如何配置 web api 的 json 序列化器将日期时间转换为 ISO 8601 格式?
数据类中的默认参数未使用 ktor 序列化程序转换为 json
.net core post自带的json序列化转换出错 post参数为null