C# “处理”;(无效)“;Newtonsoft.JSON中的值
我有一门课是这样的:C# “处理”;(无效)“;Newtonsoft.JSON中的值,c#,json,json.net,C#,Json,Json.net,我有一门课是这样的: public class MyClass { public DateTimeOffset DateCreated { get; set; } public string Name { get; set; } public User User {get;set;} } 我调用的服务有时将空值表示为“(null)”,如下所示: {"name":"(null)", "dateCreated":"(null)", "user":"(null)"} 处理这
public class MyClass
{
public DateTimeOffset DateCreated { get; set; }
public string Name { get; set; }
public User User {get;set;}
}
我调用的服务有时将空值表示为“(null)”,如下所示:
{"name":"(null)", "dateCreated":"(null)", "user":"(null)"}
处理这个问题的最佳方法是什么?我已经尝试插入自定义合同解析程序,但我不想事事都这样做。是否有一种方法可以覆盖标记化,从而将其视为null?或者利用一些其他扩展点?最简单的方法可能是将JSON加载到一个字符串中,然后用实际的空标记替换
“(空)”
字符串标记:
var obj = JObject.Parse(jsonString);
foreach (var value in obj.Descendants().OfType<JValue>().Where(v => v.Type == JTokenType.String && (string)v == "(null)").ToList())
value.Replace(JValue.CreateNull());
var myClass = obj.ToObject<MyClass>();
或者,您可以完全删除psuedo空值属性:
var obj = JObject.Parse(jsonString);
foreach (var value in obj.Descendants().OfType<JValue>().Where(v => v.Type == JTokenType.String && (string)v == "(null)").ToList())
{
if (value.Parent.Type == JTokenType.Property)
value.Parent.Remove(); // Psuedo null-valued object property. Remove the property.
else
value.Replace(JValue.CreateNull()); // Psuedo null-valued array entry. Replace with null to avoid reindexing the array.
}
var myClass = obj.ToObject<MyClass>();
var obj=JObject.Parse(jsonString);
foreach(类型()的obj.subjects()中的var值,其中(v=>v.Type==JTokenType.String&&(String)v==“(null)”).ToList()
{
if(value.Parent.Type==JTokenType.Property)
value.Parent.Remove();//Psuedo空值对象属性。删除该属性。
其他的
value.Replace(JValue.CreateNull());//Psuedo空值数组项。替换为null以避免对数组重新编制索引。
}
var myClass=obj.ToObject();
“处理这个问题的最佳方法是什么?”让服务输出一个正确的null
:)否则,我肯定有办法解决它…听起来像是一个蹩脚的服务器;伙计们,服务器不在我的控制之下。一个字符串。将(null)
上的替换为null
?完美。这是我尝试过的解决方案,但由于我对JObject
s太不熟悉,所以在工作中遇到了很多麻烦。谢谢
var obj = JObject.Parse(jsonString);
foreach (var value in obj.Descendants().OfType<JValue>().Where(v => v.Type == JTokenType.String && (string)v == "(null)").ToList())
{
if (value.Parent.Type == JTokenType.Property)
value.Parent.Remove(); // Psuedo null-valued object property. Remove the property.
else
value.Replace(JValue.CreateNull()); // Psuedo null-valued array entry. Replace with null to avoid reindexing the array.
}
var myClass = obj.ToObject<MyClass>();