Как конвертировать имена свойств JavaScript объектов при передаче в .NET через CefSharp

Проблема с конвертацией имен свойств в CefSharp

Использую JavaScript интеграцию в CefSharp для подключения .NET класса к JavaScript коду. Столкнулся с проблемой конвертации имен свойств.

Мой код на .NET:

public class ShapeProcessor
{
    public Box Transform(Box input)
        => new Box { Length = input.Height, Height = input.Length };
}

public class Box
{
    public int Length { get; set; }
    public int Height { get; set; }
}

Регистрация объекта:

browser.JavascriptObjectRepository.NameConverter = new CamelCaseJavascriptNameConverter();
ShapeProcessor processor = new();
browser.JavascriptObjectRepository.Register("processor", processor, BindingOptions.DefaultBinder);

JavaScript код:

await cefSharp.bindObjectAsync("processor");
let result = await processor.transform({ length: 10, height: 20 });
console.log(`результат: ${result.length}×${result.height}`);

В консоли вижу результат: 0×0 вместо ожидаемых значений. Проблема в том, что CamelCaseJavascriptNameConverter работает только в одну сторону - при передаче данных из .NET в JavaScript, но не наоборот.

Как правильно настроить двустороннюю конвертацию имен свойств? Есть ли встроенное решение или нужно делать кастомный конвертер?

У меня была такая же проблема! Попробуй создать кастомный converter который наследуется от CamelCaseJavascriptNameConverter и переопределяет метод ConvertReturnedObjectPropertyAndFieldNames. Там можно добавить логику для обратной конвертации. А как ты тестировал что данные вообще передаются? Может проблема глубже?

По моему опыту, CamelCaseJavascriptNameConverter действительно работает только для исходящих данных. Я решал похожую задачу через создание wrapper-методов на .NET стороне, которые принимают dynamic параметры и делают маппинг вручную. Например, создать промежуточный метод TransformDynamic(dynamic input), который извлекает свойства по camelCase именам и передает их в основной Transform метод. Не самое элегантное решение, но работает стабильно и не требует сложной настройки конвертеров.

Сталкивался с этим недавно. CefSharp не умеет автоматически конвертировать обратно из camelCase в PascalCase при десериализации. Самый простой способ - использовать JsonPropertyAttribute на свойствах твоего Box класса:

public class Box
{
    [JsonProperty("length")]
    public int Length { get; set; }
    [JsonProperty("height")]
    public int Height { get; set; }
}

Так CefSharp будет правильно маппить свойства в обе стороны без лишних заморочек с кастомными конвертерами.