преобразуйте объект в значение serde_json::без сериализации и десериализации

#rust #serde #serde-json

Вопрос:

У меня есть эта структура, в которой есть поле, содержащее тип Option<serde_json::Value>

Я хочу иметь возможность хранить любой объект( т. Е. Объект, созданный любой структурой) в этом поле. Текущий подход, который я использую, заключается в том, чтобы сначала преобразовать объект в строку JSON (с помощью serde_json::to_string ), а затем снова преобразовать его в serde_json::Value using serde_json::from_str .

Я делаю это для того, чтобы я мог отправлять различные виды запросов JSON с произвольными данными.

Итак, есть ли способ преобразовать любой serde-сериализуемый объект в serde_json::Value без выполнения serde_json::to_string и serde_json::from_str ? Если я иду по неправильному пути, пожалуйста, предложи что-нибудь получше, Тай!

Ответ №1:

Есть serde_json::value::to_value() специально для этого:

 pub fn to_value<T>(value: T) -> Result<Value, Error>  where
    T: Serialize,
 

То есть to_value берет все T , что есть Serialize , и выдает вам Value или ошибку (в случае сбоя сериализации).