解析 Google 翻译 Json C#

发布于 2024-11-29 15:42:30 字数 245 浏览 1 评论 0原文

我正在尝试使用 System.Runtime.Serialization.Json 库解析一些 JSON。该文档似乎有点稀疏,我对如何完成我需要的内容感到困惑。这是我需要解析的 JSON 格式。

{
 "data": {
  "translations": [
   {
    "translatedText": "ne",
    "detectedSourceLanguage": "en"
   }
  ]
 }
}

I'm trying to parse some JSON using the System.Runtime.Serialization.Json library. The documentation seems a little sparse and I'm confused as to how to accomplish what I need. Here is the format for the JSON I need to parse through.

{
 "data": {
  "translations": [
   {
    "translatedText": "ne",
    "detectedSourceLanguage": "en"
   }
  ]
 }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

剪不断理还乱 2024-12-06 15:42:30

这是一组表示您拥有的 JSON 数据结构的类。我选择的名称将帮助您将类型与 JSON 字符串中的位置关联起来。

[DataContract]
class RootObject
{
  [DataMember(Name = "data")]
  public DataObject Data { get; set; }
}

[DataContract]
class DataObject
{      
  [DataMember(Name="translations")]
  public List<Translation> Translations { get; set; }
}

[DataContract]
class Translation
{
  [DataMember(Name = "translatedText")]
  public string TranslatedText { get; set; }
  [DataMember(Name = "detectedSourceLanguage")]
  public string DetectedSourceLanguage { get; set; }
}

下面是将 JSON 字符串反序列化为该结构的示例。

  string json = @"
    {
      ""data"": {
      ""translations"": [
                          {
                            ""translatedText"": ""ne"",
                            ""detectedSourceLanguage"": ""en""
                          }
                        ]
                }
    }";

  var jsonSerializer = new DataContractJsonSerializer(typeof(RootObject));
  var o = (RootObject)jsonSerializer.ReadObject(
    new MemoryStream(Encoding.Unicode.GetBytes(json)));

Here is a set of classes that represent the JSON data structure you have. I have chosen names that will help you correlate the type with the location in the JSON string.

[DataContract]
class RootObject
{
  [DataMember(Name = "data")]
  public DataObject Data { get; set; }
}

[DataContract]
class DataObject
{      
  [DataMember(Name="translations")]
  public List<Translation> Translations { get; set; }
}

[DataContract]
class Translation
{
  [DataMember(Name = "translatedText")]
  public string TranslatedText { get; set; }
  [DataMember(Name = "detectedSourceLanguage")]
  public string DetectedSourceLanguage { get; set; }
}

Now the following is an example of deserializing your JSON string into this structure.

  string json = @"
    {
      ""data"": {
      ""translations"": [
                          {
                            ""translatedText"": ""ne"",
                            ""detectedSourceLanguage"": ""en""
                          }
                        ]
                }
    }";

  var jsonSerializer = new DataContractJsonSerializer(typeof(RootObject));
  var o = (RootObject)jsonSerializer.ReadObject(
    new MemoryStream(Encoding.Unicode.GetBytes(json)));
剩一世无双 2024-12-06 15:42:30
    bool Clear(string str, out string res)
    {
        var ind = str.IndexOf("[[[\"");

        if (ind == -1)
        {
            res = "";
            return false;
        }

        int end = str.IndexOf("[\"\",,,", ind + 1);

        if (end == -1)
        {
            res = "";
            return false;
        }

        res = str.Substring(ind + 2, end - ind);

        var arr = res.Split(new[] {"\",\"", "\"],[\"", "[\"", "\"]"}, StringSplitOptions.RemoveEmptyEntries);

        res = "";

        for (int i = 0; i < arr.Length; i += 2)
        {
            res += arr[i];
        }

        return true;
    }
    void TranslateText(string src_lang, string dst_lang)
    {
        var input = "Some request text";

        var url = String.Format("https://translate.google.ru/translate_a/single?client=t&sl={0}&tl={1}&hl={1}&dt=bd&dt=ex&dt=ld&dt=md&dt=qc&dt=rw&dt=rm&dt=ss&dt=t&dt=at&dt=sw&ie=UTF-8&oe=UTF-8&oc=2&otf=1&trs=1&inputm=1&ssel=0&tsel=0&pc=1&q={2}", src_lang, dst_lang, input);
        var webClient = new WebClient{Encoding = Encoding.UTF8};

        webClient.DownloadStringCompleted += (sender, args) =>
        {
            string res;

            if (args.Error != null)
            {
                MessageBox.Show(args.Error.Message);

                stoped = true;

                return;
            }

            if (Clear(args.Result, out res))
            {

            }
        };

        webClient.DownloadStringAsync(new Uri(url), "your state");
    }
    bool Clear(string str, out string res)
    {
        var ind = str.IndexOf("[[[\"");

        if (ind == -1)
        {
            res = "";
            return false;
        }

        int end = str.IndexOf("[\"\",,,", ind + 1);

        if (end == -1)
        {
            res = "";
            return false;
        }

        res = str.Substring(ind + 2, end - ind);

        var arr = res.Split(new[] {"\",\"", "\"],[\"", "[\"", "\"]"}, StringSplitOptions.RemoveEmptyEntries);

        res = "";

        for (int i = 0; i < arr.Length; i += 2)
        {
            res += arr[i];
        }

        return true;
    }
    void TranslateText(string src_lang, string dst_lang)
    {
        var input = "Some request text";

        var url = String.Format("https://translate.google.ru/translate_a/single?client=t&sl={0}&tl={1}&hl={1}&dt=bd&dt=ex&dt=ld&dt=md&dt=qc&dt=rw&dt=rm&dt=ss&dt=t&dt=at&dt=sw&ie=UTF-8&oe=UTF-8&oc=2&otf=1&trs=1&inputm=1&ssel=0&tsel=0&pc=1&q={2}", src_lang, dst_lang, input);
        var webClient = new WebClient{Encoding = Encoding.UTF8};

        webClient.DownloadStringCompleted += (sender, args) =>
        {
            string res;

            if (args.Error != null)
            {
                MessageBox.Show(args.Error.Message);

                stoped = true;

                return;
            }

            if (Clear(args.Result, out res))
            {

            }
        };

        webClient.DownloadStringAsync(new Uri(url), "your state");
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文