Использую 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; }
}
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 будет правильно маппить свойства в обе стороны без лишних заморочек с кастомными конвертерами.