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 字符串可能是有意义的。
如果 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 字符串可能是有意义的。