我正在使用ssh.net将c#对象作为JSON写入SFTP服务器上的文本文件。
我能够编写它,但是双引号已从Json属性中删除,如何保留它?
echo $_COOKIE["x"];
不是使用字符串Newtosoft json序列化程序,而是上面的字符串也可以工作。
filename.txt中的当前数据:
using (var client = new SshClient(sftpServer, sftpUserName, sftpPassword))
{
client.Connect();
if (client.IsConnected)
{
// Check if the Folder Already Exists
var ifExists = client.RunCommand("cat /etc/passwd | grep -w " + directoryName);
if (!string.IsNullOrEmpty(ifExists.Result))
{
var fileExist = client.RunCommand("cat /etc/passwd | find /sftpusers/" + directoryName + "/schema -name " + fileName + ".txt");
if (fileExist != null && string.IsNullOrEmpty(fileExist.Result))
{
client.RunCommand("echo " + sftpPassword + " | sudo -S touch /sftpusers/" + directoryName + "/schema/" + fileName + ".txt");
}
var jsonData = "{\"type\":\"record\",\"name\":\"asb\",\"namespace\":\"Employee\",\"Fields\":[{\"name\":\"PurchaseId\",\"type\":\"numeric\",\"ClientFieldNm\":null,\"ImportFieldLenQty\":0,\"ImportRetainFlag\":false,\"ImportPrimaryKeyFlag\":0,\"ImportResolveFKFieldFlag\":0,\"ImportDeblankDataFlag\":false,\"ImportEncryptFlag\":false,\"ImportBatIndexFlag\":false,\"ImportEnforceValidTypeFlag\":false,\"ImportRequiredFlag\":false}]}";
var query = string.Format("echo Asdf@123 | sudo -S sh -c 'echo {0} > $1' -- /sftpusers/test/schema/{1}.txt",jsonData, fileName);
client.RunCommand(query);
}
}
client.Disconnect();
}
filename.txt中的预期数据:
{type:record,name:asb,namespace:Employee,Fields:[{name:PurchaseId,type:numeric,ClientFieldNm:null,ImportFieldLenQty:0,ImportRetainFlag:false,ImportPrimaryKeyFlag:0,ImportResolveFKFieldFlag:0,ImportDeblankDataFlag:false,ImportEncryptFlag:false,ImportBatIndexFlag:false,ImportEnforceValidTypeFlag:false,ImportRequiredFlag:false}]}
答案 0 :(得分:1)
您实际上不应该使用echo
。使用该库中的SftpClient
(而不是SshClient
)将实际文件上传到远程服务器。
但是,否则,您需要转义shell命令的引号,因此请尝试以下操作:
jsonData = jsonData.Replace(@"""", @"\""");
在回显之前。
请注意,执行命令的方式是,如果jsonData
包含单引号('
),则还需要对其进行转义(否则,它将查找外壳程序)就像命令的'echo {0} > $1'
部分的结尾