Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# “处理”;(无效)“;Newtonsoft.JSON中的值_C#_Json_Json.net - Fatal编程技术网

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>();