相关疑难解决方法(0)

在JSON.NET中序列化null

通过JSON.NET序列化任意数据时,任何null属性都将写入JSON

"propertyName":null

当然,这是正确的.

但是我要求自动将所有空值转换为默认的空值,例如null strings应该变为String.Emptynull,int?s应该变为0null,bool?s应该是false,等等.

NullValueHandling没有帮助,因为我不想Ignore空,但我也不想要Include它们(嗯,新功能?).

所以我转向实施自定义JsonConverter.
虽然实现本身是轻而易举的,但不幸的是,这仍然CanConvert()无法工作 - 永远不会调用具有null值的属性,因此WriteJson()也不会调用它.显然空值会自动序列化null,而不需要自定义管道.

例如,以下是空字符串的自定义转换器示例:

public class StringConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return typeof(string).IsAssignableFrom(objectType);
    }

    ...
    public override void WriteJson(JsonWriter writer, 
                object value, 
                JsonSerializer serializer)
    {
        string strValue = value as string;

        if (strValue == null)
        {
            writer.WriteValue(String.Empty);
        }
        else
        {
            writer.WriteValue(strValue);
        }
    }
} …
Run Code Online (Sandbox Code Playgroud)

.net c# serialization json.net

46
推荐指数
1
解决办法
4万
查看次数

使用 Json.NET 反序列化一个空数组

我有一个使用 Json.NET v7.0.1 的 C# 应用程序。作为 REST 调用的结果,我以以下形式返回了一些 JSON:

{
"messages": [ {"phoneNumber":"123-456-7890", "smsText":"abcd1234="},
              {"phoneNumber":"234-567-8901", "smsText":"efgh5678="},
              {"phoneNumber":"345-678-9012", "smsText":"12345asdf"} ]
}
Run Code Online (Sandbox Code Playgroud)

如果没有要返回的消息数据,返回的 JSON 如下所示:

{
"messages": [ ]
}
Run Code Online (Sandbox Code Playgroud)

我的 Message 类如下所示:

public class Message
{
    public string PhoneNumber { get; set; }
    public string SmsText { get; set; }

    public Message()
    {
    }

    public Message(string phoneNumber, string smsText)
    {
        PhoneNumber = phoneNumber;
        SmsText = smsText;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试反序列化 JSON 时,我使用了以下代码:

Message[] messages = JsonConvert.DeserializeObject<Message[]>(json, new JsonSerializerSettings
{
    MissingMemberHandling = MissingMemberHandling.Ignore …
Run Code Online (Sandbox Code Playgroud)

c# json.net deserialization

4
推荐指数
1
解决办法
1万
查看次数

标签 统计

c# ×2

json.net ×2

.net ×1

deserialization ×1

serialization ×1