相关疑难解决方法(0)

检查JObject中的空/ null JToken

我有以下......

JArray clients = (JArray)clientsParsed["objects"];

foreach (JObject item in clients.Children())
{
    // etc.. SQL params stuff...
    command.Parameters["@MyParameter"].Value = JTokenToSql(item["thisParameter"]);
}
Run Code Online (Sandbox Code Playgroud)

JTokenToSql 看起来像这样......

public static object JTokenToSql(JToken obj)
{
    if (obj.Any())
        return (object)obj;
    else
        return (object)DBNull.Value;
}
Run Code Online (Sandbox Code Playgroud)

我也试过((JObject)obj).Count..但似乎没有工作.

c# sql json.net

74
推荐指数
3
解决办法
9万
查看次数

Null-coalescing运算符为动态对象的属性返回null

我最近在使用Json.NET将JSON解析为动态对象时发现了null-coalescing运算符的问题.假设这是我的动态对象:

string json = "{ \"phones\": { \"personal\": null }, \"birthday\": null }";
dynamic d = JsonConvert.DeserializeObject(json);
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用?? 运算符在d的一个字段上,它返回null:

string s = "";
s += (d.phones.personal ?? "default");
Console.WriteLine(s + " " + s.Length); //outputs  0
Run Code Online (Sandbox Code Playgroud)

但是,如果我将动态属性分配给字符串,那么它工作正常:

string ss = d.phones.personal;
string s = "";
s += (ss ?? "default");
Console.WriteLine(s + " " + s.Length); //outputs default 7
Run Code Online (Sandbox Code Playgroud)

最后,当我输出Console.WriteLine(d.phones.personal == null)它时True.

我已经在Pastebin上对这些问题进行了广泛的测试.

c# json dynamic json.net null-coalescing-operator

12
推荐指数
1
解决办法
1755
查看次数

Newtonsoft Json.Net序列化JObject不会忽略空值,即使使用正确的设置也是如此

我正在尝试使用Newtonsoft Json.Net序列化对象.

这个对象是一个匿名类型,充满了很多异类的东西,主要是普通的POCO,还有一些JObjects或JArrays.

问题是,在添加NullValueHandling属性时NullValueHandling.Ignore,每个null属性都会被忽略,但前提是它只是"常规".Net对象的一部分.内部JObject或JArray遗留的每个null属性.

这是一个最小的例子:

var jobj = JObject.FromObject(new Anything{
    x = 1,
    y = "bla",
    z = null
});

var poco = new Foo {
   foo1 = "bar",
   foo2 = null
};

var serialized = JsonConvert.SerializeObject(new {
    source1 = poco,
    source2 = jobj
}, Newtonsoft.Json.Formatting.None, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore});
Run Code Online (Sandbox Code Playgroud)

是否有一种简单的方法可以忽略这些空值?我错过了一些设置选项吗?或者我必须手动处理它?

c# json json.net

9
推荐指数
1
解决办法
7932
查看次数

在Newtonsoft中使用JSON null处理的问题

我null在交易时遇到问题Newtonsoft.json.

我想查看结果null与否.基于此我想处理一些条件.

我的代码如下:

try {
    var response = GetApiData.Post(_getApiBaseUrl, data.ToString());

    var jsonString = response.ResultString;
    var jsonContent = JObject.Parse(jsonString);

    if (jsonContent["User"] != null)  // <-- null handling                 
    {
        var user = JToken.Parse(jsonContent["User"].ToString());
        membershipUser = GetMembershipUser(user);
    }
}
Run Code Online (Sandbox Code Playgroud)

该jsonContent带null是如下:

{
     "User": null
}
Run Code Online (Sandbox Code Playgroud)

如果"User": null在jsonContent["User"]回报{}和jsonContent["User"] != null条件没有抛出任何错误,而是跳越块,它执行内部线路.

所以为了null处理,我使用了这段代码:

if (jsonContent["User"].Value<string>() != null)
Run Code Online (Sandbox Code Playgroud)

如果"User": null,上面的代码工作正常.

但是如果jsonContent["User"]有有效数据,则会抛出错误.

无法将Newtonsoft.Json.Linq.JObject强制转换为Newtonsoft.Json.Linq.JToken

在jsonContent …

null json json.net

2
推荐指数
1
解决办法
4141
查看次数

当“JToken?”为空时?

使用以下方法迭代jsonIm Newtonsoft.Json:

var jObject = JObject.Parse(sr.ReadToEnd());
foreach (KeyValuePair<string, JToken?> superior in jObject) {
...
}
Run Code Online (Sandbox Code Playgroud)

正如您在上面看到的,JObject 实现了IEnumerable<KeyValueString<string, JToken?>>. 但我找不到JToken枚举中为空的情况。

我尝试过这个:

{

}
Run Code Online (Sandbox Code Playgroud)
{
   "A": { }
}
Run Code Online (Sandbox Code Playgroud)
{
   "A": ""
}
Run Code Online (Sandbox Code Playgroud)
{
    "A": null
}
Run Code Online (Sandbox Code Playgroud)

...并且它始终不为空。那么为什么要使用枚举器JToken?呢?

c# json json.net

2
推荐指数
1
解决办法
108
查看次数

标签 统计

json.net ×5

c# ×4

json ×4

dynamic ×1

null ×1

null-coalescing-operator ×1

sql ×1