diff --git a/pkg/schema/field/string.go b/pkg/schema/field/string.go
index e741b3e3c653becb6f6417c5d06abab2f68a33e6..97f96daea3345e794ed250c69bff04b25b4c0c13 100644
--- a/pkg/schema/field/string.go
+++ b/pkg/schema/field/string.go
@@ -4,6 +4,7 @@ import (
 	"context"
 	"fmt"
 	"reflect"
+	"strings"
 )
 
 var stringType = &StringType{}
@@ -62,10 +63,21 @@ func (StringType) NonStrictConvert(_ context.Context, _ *Field, v interface{}) i
 	if v == nil {
 		return nil
 	}
-	if _, ok := v.(string); ok {
+
+	switch v := v.(type) {
+	case string:
 		return v
+	case []interface{}:
+		// Преобразование списка в строку происходит через пробел,
+		// чтобы сохранить совместимость при обратном преобразовании в список
+		elems := make([]string, len(v))
+		for i, elem := range v {
+			elems[i] = fmt.Sprintf("%v", elem)
+		}
+		return strings.Join(elems, " ")
 	}
 
+	// По умолчанию используется стандартное форматирование
 	return fmt.Sprintf("%v", v)
 }
 
diff --git a/pkg/schema/field/string_test.go b/pkg/schema/field/string_test.go
index 38ce350d27b547499739c3e15eebd7cf604471b0..2a1f7be6ca5592c3b32823d95629382da2748c8d 100644
--- a/pkg/schema/field/string_test.go
+++ b/pkg/schema/field/string_test.go
@@ -49,7 +49,7 @@ func TestStringField_DecodeNonStrict(t *testing.T) {
 		{"Int", String(), 42, "42", false},
 		{"Float", String(), 3.14, "3.14", false},
 		{"Bool", String(), true, "true", false},
-		{"Array", String(), []interface{}{1, "2"}, "[1 2]", false},
+		{"Array", String(), []interface{}{1, "2"}, "1 2", false},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {