Json 成员名称带有前导或尾随空格的反序列化

Json deserialization with member names with leading or trailing spaces

如果 Json 字符串的成员名称带有 leading/trailing 空格,是否可以将 Json 字符串反序列化为对象。我正在使用 Newtonsoft.Json 作为我的序列化库。

例如以下是我的对象类型:

public class Sample
{
    public ComplexType Default {get; set;}
}
public class ComplexType
{
    public IEnumerable<string> Data {get; set;}
}

我想要的是,如果我有以下 Json 字符串,那么它也应该反序列化为有效的 Sample 对象。请注意,下面的名称中有尾随空格。在 class 中用 [Json属性(属性Name = "Default ")] 装饰 "Default" 成员不是一个选项,因为理论上我可以有任意数量的前导and/or 尾随空格。

{
    "Default   ":
    {
      "Data":["data1","data2"]
    }
}

请让我知道 Newtonsoft.Json 中是否有开箱即用的支持或其他解决此问题的方法。我正在寻找适用于任何对象结构的通用解决方案。

更新: 更新了对象结构和预期的解决方案。

您不能只更改 JObject 属性 名称,它是只读的。您只能使用此代码创建一个新的 json 对象,例如

    var sampleObj=new JObject();

    var jsonParsed=JObject.Parse(json);
    foreach (var prop in jsonParsed.Properties())
        sampleObj.Add(prop.Name.Trim(),prop.Value);
    

   Sample sample=sampleObj.ToObject<Sample>();

更新

如果您的对象非常复杂,您只需添加代码来迭代子对象。或者使用 RegEx 修复 json 字符串可能是有意义的。