如何使用ssh.net将格式化的JSON写入文本文件?

时间:2019-04-08 06:50:42

标签: c# json.net ssh.net

我正在使用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}]}

1 个答案:

答案 0 :(得分:1)

您实际上不应该使用echo。使用该库中的SftpClient(而不是SshClient)将实际文件上传到远程服务器。

但是,否则,您需要转义shell命令的引号,因此请尝试以下操作:

jsonData = jsonData.Replace(@"""", @"\""");

在回显之前。

请注意,执行命令的方式是,如果jsonData包含单引号('),则还需要对其进行转义(否则,它将查找外壳程序)就像命令的'echo {0} > $1'部分的结尾