Как записать форматированный JSON в текстовый файл, используя ssh.net? - PullRequest
0 голосов
/ 08 апреля 2019

Я записываю объект ac # как JSON в текстовый файл, который находится на SFTP-сервере с использованием ssh.net.

Я могу написать его, но двойные кавычки удаляются из свойства Json, Как сохранить его?

  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();
        } 

Вместо использования строки Newtosoft json serializer, но также как и выше, работает строка.

Текущие данные в 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}]}

Ожидаемые данныев 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 Ответ

1 голос
/ 08 апреля 2019

Вы не должны использовать echo для этого.Используйте SftpClient в этой библиотеке (вместо SshClient) для загрузки фактического файла на удаленный сервер.

Но в противном случае вам нужно экранировать кавычки для команды оболочки, поэтому попробуйте что-то вроде:

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

Перед тем как повторить его.

Обратите внимание, что при выполнении вашей команды, если ваш jsonData содержит одиночную кавычку ('), вам также нужно будет экранировать ее (в противном случае она будет выглядеть как оболочкаконец 'echo {0} > $1' части вашей команды

...