c# - JSON.NET 可以使用 "sidecar"方法序列化对象吗?

标签 c# json.net

序列化的常规方法是将属性应用于您的类以描述序列化(或反序列化)是如何进行的。例如:

[DataContract]
class MyClass
{
   [DataMember]
   public string Name { get; set; }
}

有没有一种方法可以使用 JSON.NET 执行序列化,而无需将属性应用于您的类,而是提供一个“sidecar”对象,以某种方式描述类的哪些方面将被序列化。

我问的原因与关注点分离有关。如果您的 API 不了解请求如何到达它,那么其自然扩展就是您的 API 数据结构不应使用序列化属性进行修饰。

当然,我可以获取我的一个 API 结果对象的“内容”,并将其复制到另一个对象中,该对象具有一个确实具有适当序列化属性的类,但在某些情况下,这似乎更可取的是说“嘿,我想序列化这个对象,而这个对象没有序列化属性,所以这里有一个单独的数据结构来描述要做什么。”

当然,这会很方便的另一个地方是第三方库,您没有机会修改对象(同样,您可以复制值,但我正在寻找其他方法) .

最佳答案

您可以使用 JsonSerializerSettings 指定各种序列化选项。您可以指定 whether to serialize or not a particular property ,如何序列化特定类型或转换其值等。

     var settings = new JsonSerializerSettings
            {
                Formatting = Formatting.Indented,
                .....
            };
     settings.Converters.Add(new StringEnumConverter { CamelCaseText = true });
     settings.ContractResolver = new CamelCasePropertyNamesContractResolver();
     settings.Binder = new SomeSerializationBinder(new DefaultSerializationBinder());

     var result = JsonConvert.SerializeObject(yourObject, settings);

关于c# - JSON.NET 可以使用 "sidecar"方法序列化对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36469434/

相关文章:

c# - 传递和执行具有不同参数签名的函数

c# - C# 中验证正则表达式格式是否正确的最简单方法是什么?

json.net - 在 Json.net 中全局设置 IgnoreSerializedAttribute

c# - 如何将名称-值集合对从 JSON 字符串反序列化为对象?

c# - 添加第二个采用 Color 类型参数的构造函数时,Json.Net 会起作用吗?

c# - 使用 Json.Net 丢弃 json 对象后的垃圾字符

c# - 检查项目引用的分析器

c# - 是否可以从默认表 AspNetUsers 中删除行?如果是,请解释一下

c# - c#/net/中的串行通信编程结构

c# - Json.NET 保留 native 类型