JSON.NET可以使用" sidecar"序列化一个对象。进场?

时间:2016-04-07 07:28:12

标签: c# json.net

序列化的常规方法是将属性应用于类,以描述序列化(或反序列化)的继续。例如:

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

有没有办法使用JSON.NET执行序列化而不将属性应用于您的类,而是通过提供" sidecar"描述以某种方式序列化类的哪些方面的对象。

我问的原因与关注点分离有关。如果您的API与请求的获取方式无关,那么自然的扩展就是您的API数据结构不应该使用序列化属性进行修饰。

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

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

1 个答案:

答案 0 :(得分:3)

您可以使用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);