diff --git a/td/generate/tl_writer_dotnet.h b/td/generate/tl_writer_dotnet.h index 8228fa23..d6f6f3d9 100644 --- a/td/generate/tl_writer_dotnet.h +++ b/td/generate/tl_writer_dotnet.h @@ -376,7 +376,8 @@ class TlWriterDotNet : public TL_writer { } else { ss << ", "; } - ss << (gen_field_type(it) == "Array^" ? "Bytes" : "") << "FromUnmanaged(from." << gen_native_field_name(it.name) << ")"; + bool need_bytes = gen_field_type(it) == "Array^" || gen_field_type(it) == "Array^>^"; + ss << (need_bytes ? "Bytes" : "") << "FromUnmanaged(from." << gen_native_field_name(it.name) << ")"; } ss << ");\n}\n"; } diff --git a/td/tl/tl_dotnet_object.h b/td/tl/tl_dotnet_object.h index 57b18b22..d81420a2 100644 --- a/td/tl/tl_dotnet_object.h +++ b/td/tl/tl_dotnet_object.h @@ -82,6 +82,16 @@ auto CLRCALL FromUnmanaged(std::vector &vec) { return res; } +inline auto CLRCALL BytesFromUnmanaged(const std::vector &vec) { + using ToT = decltype(BytesFromUnmanaged(vec[0])); + Array^ res = REF_NEW Vector(static_cast(vec.size())); + ArrayIndexType i = 0; + for (auto &from : vec) { + ArraySet(res, i++, BytesFromUnmanaged(from)); + } + return res; +} + template auto CLRCALL FromUnmanaged(td::td_api::object_ptr &from) -> decltype(FromUnmanaged(*from.get())) { if (!from) {