JSON.NET 将对象 序列化为 JSON字符串时,能否指定,某个属性不被转化。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JSON.NET 将对象 序列化为 JSON字符串时,能否指定,某个属性不被转化。相关的知识,希望对你有一定的参考价值。

比如,有Password这个属性,就不希望被转化出来。。

通常在需要序列化属性下标记即可:
[JsonProperty(Name = "password")]
public string Password get; set;

你试试 不标记的情况下能否实现~追问

我看到网上的很多例子,并没有去特别的标记属性啊???

呵呵。自己解决了。
在不想出现的 字段前 加上 [JsonIgnore] 即可。呵呵。原来如此简单。。。哎。。。

追答

默认是都序列化

在类的上面写上 [JsonObject(MemberSerialization.OptIn)] 标记
然后在其他需要序列化的属性上面写 [JsonProperty] 标记

Password不标记。

// opt-in指定成员序列化(默认opt-out全部序列化),要序列化的成员必须带有JsonProperty

追问

嗯。。两种方法,我一会都试试。呵呵。。。

参考技术A get; set;

Json.net 将数字属性序列化为字符串

【中文标题】Json.net 将数字属性序列化为字符串【英文标题】:Json.net serialize numeric properties as string 【发布时间】:2017-01-24 08:41:39 【问题描述】:

我正在使用 JsonConvert.SerializeObject 序列化模型对象。 服务器期望所有字段都是字符串。我的模型对象具有数字属性和字符串属性。我无法向模型对象添加属性。有没有办法像字符串一样序列化所有属性值?我必须只支持序列化,不支持反序列化。

【问题讨论】:

***.com/questions/37475997/… @CodeJoy:对我来说,这似乎很专注于 DataTable - 我看不出这些答案将如何帮助 OP。 见Convert long number as string in the serialization。 对不起@CodeJoy,但我在想一些“更自动”的东西,比如 ContractResolver 或类似的东西。我不想手动将我的模型对象转换为所有属性都为字符串的 JObject。我将使用此解决方案作为最后的资源,因为它有效。无论如何谢谢你的帮助!! ;) @dbc 已经过测试,效果很好。完美!! 【参考方案1】:

即使是数字类型,您也可以提供自己的JsonConverter。我刚刚尝试过,它可以工作——它又快又脏,你几乎肯定想扩展它以支持其他数字类型(longfloatdoubledecimal 等)但它应该得到你去:

using System;
using System.Globalization;
using Newtonsoft.Json;

public class Model

    public int Count  get; set; 
    public string Text  get; set; 



internal sealed class FormatNumbersAsTextConverter : JsonConverter

    public override bool CanRead => false;
    public override bool CanWrite => true;
    public override bool CanConvert(Type type) => type == typeof(int);

    public override void WriteJson(
        JsonWriter writer, object value, JsonSerializer serializer)
    
        int number = (int) value;
        writer.WriteValue(number.ToString(CultureInfo.InvariantCulture));
    

    public override object ReadJson(
        JsonReader reader, Type type, object existingValue, JsonSerializer serializer)
    
        throw new NotSupportedException();
    


class Program

    static void Main(string[] args)
    
        var model = new Model  Count = 10, Text = "hello" ;
        var settings = new JsonSerializerSettings
         
            Converters =  new FormatNumbersAsTextConverter() 
        ;
        Console.WriteLine(JsonConvert.SerializeObject(model, settings));
    

【讨论】:

以上是关于JSON.NET 将对象 序列化为 JSON字符串时,能否指定,某个属性不被转化。的主要内容,如果未能解决你的问题,请参考以下文章

使用 Json.net 将 JSON 对象反序列化为动态对象

如何使用json.net自定义反序列化为对象

Json.NET:将嵌套数组反序列化为强类型对象

csharp 使用Newtonsoft JSON.NET将任何对象序列化/反序列化为JSON

JSON.Net 将集合序列化为数组数组

将实体框架对象序列化为 JSON