fastJSON 的一個擴展版本:PowerJSON

jopen 9年前發布 | 18K 次閱讀 PowerJSON JSON開發包

PowerJSON 是 fastJSON 的一個擴展版本,提供一些新方法、類和接口,以及對發現的問題進行修復。 

PowerJSON的特性

新特性

  • Rename serialized members.
  • Rename serialized Enum values.
  • Deserializing non-public members.
  • Polymorphic serialization without JSON extensions.
  • Write out additional key-value pairs in the serialized JSON.
  • Conditional serialization.
  • Noninvasive control of serialization.
  • A comprehensive documentation.

新的類和接口

The newly introduced classes and interfaces have brought more control onto each aspect in serialization.

  • SerializationManager: Caches the reflection result and controls the serialization.
  • IReflectionController: Controls every possible aspect in reflection for serialization.
  • IJsonInterceptor: Intercepts JSON serialization and enables conditional serialization.
  • IJsonConverter: Converts between various value types.

擴展的屬性

This fork has empowered fastJSON to serialize and deserialize objects with additional attribute types. The attributes are listed below:

  • JsonInterceptorAttribute: 1) controls the procedure of serialization. 2) allows conditional serialization. 3) allows writing out extra key-value pairs in the serialized object.
  • JsonFieldAttribute: 1) controls the name of the serialized field or property. 2) allows serializing interface or abstract types with the Type and Name conbination in the attribute.
  • JsonIncludeAttribute: 1) explicitly controls whether a field or property is serialized or not. 2) allows serializing readonly property even when theShowReadOnlyPropertiessetting is turned off.
  • JsonConverterAttribute: allows transforming data before serialization.
  • JsonEnumValueAttribute: controls the serialized literal name of anEnumvalue.
  • JsonSerializableAttribute: enables serializing and deserializing private or internal types.

Some .NET built-in attributes are also supported.

  • DefaultValueAttribute: values equal toDefaultValueAttribute.Valueare not serialized.
  • ReadOnlyAttribute: values are not deserialized whenReadOnlyAttribute.IsReadOnlyis set to true.

JSONParameters中的新設置

This fork introduced the following settings inJSONParameters:

  • NamingConvention: control the naming convention of serialized fields and properties. It has added support for camel-case, uppercase names.
  • SerializeStaticMembers: control whether static fields or properties should be serialized. (2015-4-2)
  • ShowReadOnlyFields: control whether readonly fields should be serialized. (2015-4-7)
  • SerializeEmptyCollections: control whether zero length collections, arrays, lists, dictionaries, etc. are serialized. (2015-4-25)

示例代碼:

// marks the internal DemoClass class deserializable
[JsonSerializable]
internal class DemoClass
{
    // marks MyProperty property to be serialized to a field named "prop"
    [JsonField ("prop")]
    public string MyProperty { get; set; }

    // marks MyEnumProperty property to be serialized to a field named "enum"
    [JsonField ("enum")]
    public MyEnum MyEnumProperty { get; set; }

    // marks not to serialize the Number property, if its value is 0
    [System.ComponentModel.DefaultValue (0)]
    public int Number { get; set; }

    // marks the serialized name of Identifier will be "a", if its type is ClassA,
    //     and "b" for ClassB, and "variant" for other types
    [JsonField ("a", typeof (ClassA))]
    [JsonField ("b", typeof (ClassB))]
    [JsonField ("variant")]
    public object Identifier { get; set; }

    // marks the InternalValue property will not be serialized
    [JsonInclude (false)]
    // marks the InternalValue property will not be deserialized
    [System.ComponentModel.ReadOnly (true)]
    public int InternalValue { get; set; }
}

public enum MyEnum
{
    None,
    // marks the serialized name of Vip to "VIP"
    [JsonEnumValue ("VIP")]
    Vip
}

項目主頁:http://www.baiduhome.net/lib/view/home/1431395082435

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!