关于.netcore中序列化的特性

在.NET Core中,有几个常用的序列化特性可以用来自定义对象的序列化和反序列化行为。下面是一些常用的序列化特性:

  1. [DataContract][DataMember]: 这两个特性用于在类上和属性上标记需要进行序列化的成员。使用DataContractSerializer进行序列化时,只有带有DataContract特性的类才会被序列化,而带有DataMember特性的属性才会被包含在序列化结果中。

  2. [Serializable]: 这个特性用于标记类是可序列化的。Serializable特性应用于类时,表示该类的对象可以被二进制序列化器(如BinaryFormatter)序列化和反序列化。

  3. [JsonIgnore]: 这个特性用于在属性上标记不需要进行序列化的成员。使用JSON序列化时,带有JsonIgnore特性的属性将会被忽略,不会包含在序列化结果中。

  4. [JsonProperty]: 这个特性用于在属性上标记自定义属性名。使用JSON序列化时,可以使用JsonProperty特性指定属性在序列化结果中的名称。

除了上述常用的序列化特性外,还有其他一些可以用于特定场景的序列化特性,如XmlIgnore(在XML序列化时忽略属性)、NonSerialized(在二进制序列化时忽略字段)等。

需要注意的是,不同的序列化库可能支持不同的特性。如果你在使用第三方的序列化库(如Newtonsoft.Json),可能需要查看该库的文档来了解它支持的特性和使用方式。另外,.NET Core也提供了一些内置的序列化库,如XmlSerializer、DataContractSerializer和BinaryFormatter,它们也有各自的特性和使用方式。

  1. [DataContract][DataMember]
[DataContract]
public class Person
{
    [DataMember]
    public string Name { get; set; }

    [DataMember]
    public int Age { get; set; }
}

上面的例子中,使用了DataContract特性标记Person类,表示它是可进行序列化的类。同时,使用了DataMember特性标记NameAge属性,表示它们是需要进行序列化的成员。

  1. [Serializable]
[Serializable]
public class Car
{
    public string Brand { get; set; }
    [NonSerialized]
    public int Year;
}

上面的例子中,使用了Serializable特性标记Car类,表示它是可进行二进制序列化的类。同时,使用NonSerialized特性标记Year字段,表示在序列化和反序列化过程中忽略该字段。

  1. [JsonIgnore]
public class Book
{
    public string Title { get; set; }
    public string Author { get; set; }

    [JsonIgnore]
    public bool IsAvailable { get; set; }
}

上面的例子中,使用了JsonIgnore特性标记IsAvailable属性,表示在JSON序列化过程中忽略该属性。

  1. [JsonProperty]
public class Product
{
    public string Id { get; set; }

    [JsonProperty("name")]
    public string ProductName { get; set; }
}

上面的例子中,使用了JsonProperty特性标记ProductName属性,并指定了它在JSON序列化结果中的名称为"name"

你可能感兴趣的:(C#,.netcore,开发语言)