【问题标题】:JSON parse error NewtonsoftJSON 解析错误 Newtonsoft
【发布时间】:2017-06-03 09:54:01
【问题描述】:

我在尝试解码 json 对象时遇到错误:

代码:

    public class retData
    {
        public string Text { get; set; }
    }

    private void btnCreateProject_Click(object sender, EventArgs e)
    {
        string jsonResponse = Helpers.translateText("Some {useful|helpful|beneficial|valuable|handy|practical} {tips|suggestions|ideas|guidelines|recommendations|strategies} for {getting|obtaining|acquiring|receiving|finding|having} {best|very best|greatest|ideal|finest|most effective} and {professional|expert|skilled|specialist|qualified|experienced} carpet {cleaning|cleansing} {services|solutions|providers|companies|expert services|products and services}%first_paragraph-article%Some {useful|helpful|beneficial|valuable|handy|practical} {tips|suggestions|ideas|guidelines|recommendations|strategies} for {getting|obtaining|acquiring|receiving|finding|having} {best|very best|greatest|ideal|finest|most effective} and {professional|expert|skilled|specialist|qualified|experienced} carpet {cleaning|cleansing} {services|solutions|providers|companies|expert services|products and services}", "de", txtBoxYandexAPI.Text);
        retData theText = JsonConvert.DeserializeObject<retData>(jsonResponse);
    }

响应 JSON 是:

{"code":200,"lang":"en-de","text":["Einige {nützlich|hilfreich|nützlich|wertvoll|nützlich|praktisch} {Tipps|Vorschläge|Ideen|Leitlinien|Empfehlungen|Strategien} {Anreise|Beschaffung|Erwerb|erhalten|finden|haben} {besten|besten|größten|ideal|besten|meisten effektive} und {professional|expert|qualifizierten|Spezialisten|qualifizierte|erfahrene} Teppich {Reinigung|cleansing} {Dienstleistungen|Lösungen|Dienstleister|Unternehmen|expert services|Produkte und Dienstleistungen} %first_paragraph-Artikel% Einige {nützlich|hilfreich|nützlich|wertvoll|nützlich|praktisch} {Tipps|Vorschläge|Ideen|Leitlinien|Empfehlungen|Strategien} {Anreise|Beschaffung|Erwerb|erhalten|finden|haben} {besten|besten|größten|ideal|besten|meisten effektive} und {professional|expert|qualifizierten|Spezialisten|qualifizierte|erfahrene} Teppich {Reinigung|cleansing} {Dienstleistungen|Lösungen|Dienstleister|Unternehmen|expert services|Produkte und Dienstleistungen} "]}

我得到的错误是:附加信息:解析值时遇到意外字符:[。路径“文本”,第 1 行,位置 35。 我正在使用 newtonsoft json 包,我没有看到问题,JSON 响应对我来说看起来是正确的,或者是正确的。

【问题讨论】:

    标签: c# json json.net


    【解决方案1】:

    您必须为您的 json 中的文本创建一个 List&lt;string&gt;,键包含字符串数组。 所以它看起来像

            public static void Main()
            {
                string jsonResponse = "{\"code\":200,\"lang\":\"en-de\",\"text\":[\"Einige {nützlich|hilfreich|nützlich|wertvoll|nützlich|praktisch} {Tipps|Vorschläge|Ideen|Leitlinien|Empfehlungen|Strategien} {Anreise|Beschaffung|Erwerb|erhalten|finden|haben} {besten|besten|größten|ideal|besten|meisten effektive} und {professional|expert|qualifizierten|Spezialisten|qualifizierte|erfahrene} Teppich {Reinigung|cleansing} {Dienstleistungen|Lösungen|Dienstleister|Unternehmen|expert services|Produkte und Dienstleistungen} %first_paragraph-Artikel% Einige {nützlich|hilfreich|nützlich|wertvoll|nützlich|praktisch} {Tipps|Vorschläge|Ideen|Leitlinien|Empfehlungen|Strategien} {Anreise|Beschaffung|Erwerb|erhalten|finden|haben} {besten|besten|größten|ideal|besten|meisten effektive} und {professional|expert|qualifizierten|Spezialisten|qualifizierte|erfahrene} Teppich {Reinigung|cleansing} {Dienstleistungen|Lösungen|Dienstleister|Unternehmen|expert services|Produkte und Dienstleistungen} \"]}";
                retData theText = JsonConvert.DeserializeObject<retData>(jsonResponse);
            }
            public class retData
            {
                public List<string> text { get; set; }
            }
    

    【讨论】:

      【解决方案2】:

      尝试将此作为您的 retdata 对象:

      public class retData
      {
        public int code { get; set; }
        public string lang { get; set; }
        public List<string> text { get; set; }
      }
      

      text 是字符串数组。

      【讨论】:

        【解决方案3】:

        看起来你的文本属性是一个包含一个组件的数组,所以基本上你需要弄清楚。

        基本上,您正在研究使用以下类进行反序列化:

        public class retData
        {    
           public int code { get; set; }
           public string lang { get; set; }
           public string[] text { get; set; }
        }
        

        之后,您需要从 text 属性中获取 .FirstOrDefault() 或通过索引 [0] 来获取该字符串。

        P.S:如果你不使用 codelang,你可以将它们留在你的 retData 类之外。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-06-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多