智能地替换字符串



我正在使用JSON API。由于c#不接受-(减号)或。(点),我不得不用_(下划线)替换每个字符。当JSON响应作为字符串接收时,就会发生替换,这样每个属性名称都包含-或。将其替换为_,则每个属性名称都将与它将被反序列化到的类中的属性名称相同。

为了更清楚,这里有一些例子:

我收到以下JSON:{ "id": 1, "result": [ { "data": [ { "adm-pass": ""}]}在我想反序列化为的类中,我有这样的属性:public String adm_pass {get; set;}

因此,我将减号替换为下划线,以便NewtonSoft解析器可以相应地对其进行反序列化。

我的问题是,有时我会在JSON中得到一些负整数。因此,如果我在:{"beta" : -1}中进行字符串替换,我会得到一个解析异常,因为-1(此处为整数)变为_1,无法正确反序列化并引发异常。

有没有一种方法可以巧妙地替换字符串,这样我就可以避免这个错误?例如,如果-后面跟一个int,它就不会被替换。如果这种方式不存在,这类问题有解决方案吗?

Newtonsoft允许您指定JSON属性的确切名称,该属性将用于序列化/反序列化。所以你应该能够做这个

[JsonProperty("adm-pass")]
public String adm_pass { get; set; }

这样,您就不会被限制为将属性命名为JSON属性名称。在您的情况下,您不需要进行字符串替换。

希望这能有所帮助。

您必须检查是否替换了键而不是值,也许可以使用类似的regexhttp://regexr.com/3d471

Regex可以按照wlalele的建议工作。

但我会创建一个这样的新对象:

  1. 创建一个新对象:

    var sharpObj = {};
    
  2. 将对象作为属性循环,如下所述:遍历对象属性

    for (var property in object) {
        if (object.hasOwnProperty(property)) {
            // do stuff
        }
    }
    
  3. 在//do stuff部分中,使用所需的字符串替换在sharpObj上创建一个属性,并将该属性设置为相同的值。

    var cleanProperty = cleanPropertyName(property);
    sharpObj[cleanProperty] = orginalObject[property];
    

注意:我假设您可以找到cleanPropertyName()方法或类似方法。

  1. 对对象进行字符串化

    var string = JSON.stringify(sharpObj);
    

您可以使用子字符串来检查下一个字符是否为整数,这可以很容易地适应您的代码,因为您已经找到了一个字符,因此您可以执行

int a;
if(int.TryParse(adm_pass.Substring(adm_pass.IndexOf("-") + 1,1),out a))
{
    //Code if next character is an int
}
else
{
    adm_pass = adm_pass.Replace("-","_");
}

这种代码可以循环,直到没有剩余的连字符/减号

相关内容

  • 没有找到相关文章

最新更新