0
votes

My task includes creating a Blazor app where I would use Azure Translator, but I keep on getting this error:

"Severity Code Description Project File Line Suppression State Error CS1061 'object' does not contain a definition for 'SerializeObject' and no accessible extension method 'SerializeObject' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)"

Here is the code, I keep getting the error on line 28, 40, and 57.

namespace BlazorTranslator.Data
{
    public class TranslationService
    {
        public object JsonConvert { get; private set; }

        public async Task<TranslationResult[]> GetTranslatation(string textToTranslate, string targetLanguage)
        {
            string subscriptionKey = "17e194b6968245339780ce0c266ea2bf";
            string apiEndpoint = "https://api.cognitive.microsofttranslator.com/";
            string route = $"/translate?api-version=3.0&to={targetLanguage}";
            string requestUri = apiEndpoint + route;
            TranslationResult[] translationResult = await TranslateText(subscriptionKey, requestUri, textToTranslate);
            return translationResult;
        }

        async Task<TranslationResult[]> TranslateText(string subscriptionKey, string requestUri, string inputText)
        {
            object[] body = new object[] { new { Text = inputText } };
            var requestBody = JsonConvert.SerializeObject(body);

            using (var client = new HttpClient())
            using (var request = new HttpRequestMessage())
            {
                request.Method = HttpMethod.Post;
                request.RequestUri = new Uri(requestUri);
                request.Content = new StringContent(requestBody, Encoding.UTF8, "application/json");
                request.Headers.Add("Ocp-Apim-Subscription-Key", subscriptionKey);

                HttpResponseMessage response = await client.SendAsync(request).ConfigureAwait(false);
                string result = await response.Content.ReadAsStringAsync();
                TranslationResult[] deserializedOutput = JsonConvert.DeserializeObject<TranslationResult[]>(result);

                return deserializedOutput;
            }
        }

        public async Task<AvailableLanguage> GetAvailableLanguages()
        {
            string endpoint = "https://api.cognitive.microsofttranslator.com/languages?api-version=3.0&scope=translation";
            var client = new HttpClient();
            using (var request = new HttpRequestMessage())
            {
                request.Method = HttpMethod.Get;
                request.RequestUri = new Uri(endpoint);
                var response = await client.SendAsync(request).ConfigureAwait(false);
                string result = await response.Content.ReadAsStringAsync();

                AvailableLanguage deserializedOutput = JsonConvert.DeserializeObject<AvailableLanguage>(result);

                return deserializedOutput;
            }
        }
    }
}
1

1 Answers

0
votes

The problem is in this line public object JsonConvert { get; private set; }, as you have defined it in the class, but you want to use NewtonSoft library. so you have to install the nugget package for this library and use it.

remove the line public object JsonConvert { get; private set; } and add the namespace using Newtonsoft.Json; to the class.

https://www.newtonsoft.com/json