using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters;
using DPumpHydr.WinFrmUI.WenSkin.Json.Serialization;
namespace DPumpHydr.WinFrmUI.WenSkin.Json
{
///
/// Specifies the settings on a object.
///
public class JsonSerializerSettings
{
internal const ReferenceLoopHandling DefaultReferenceLoopHandling = ReferenceLoopHandling.Error;
internal const MissingMemberHandling DefaultMissingMemberHandling = MissingMemberHandling.Ignore;
internal const NullValueHandling DefaultNullValueHandling = NullValueHandling.Include;
internal const DefaultValueHandling DefaultDefaultValueHandling = DefaultValueHandling.Include;
internal const ObjectCreationHandling DefaultObjectCreationHandling = ObjectCreationHandling.Auto;
internal const PreserveReferencesHandling DefaultPreserveReferencesHandling = PreserveReferencesHandling.None;
internal const ConstructorHandling DefaultConstructorHandling = ConstructorHandling.Default;
internal const TypeNameHandling DefaultTypeNameHandling = TypeNameHandling.None;
internal const MetadataPropertyHandling DefaultMetadataPropertyHandling = MetadataPropertyHandling.Default;
internal const FormatterAssemblyStyle DefaultTypeNameAssemblyFormat = FormatterAssemblyStyle.Simple;
internal static readonly StreamingContext DefaultContext;
internal const Formatting DefaultFormatting = Formatting.None;
internal const DateFormatHandling DefaultDateFormatHandling = DateFormatHandling.IsoDateFormat;
internal const DateTimeZoneHandling DefaultDateTimeZoneHandling = DateTimeZoneHandling.RoundtripKind;
internal const DateParseHandling DefaultDateParseHandling = DateParseHandling.DateTime;
internal const FloatParseHandling DefaultFloatParseHandling = FloatParseHandling.Double;
internal const FloatFormatHandling DefaultFloatFormatHandling = FloatFormatHandling.String;
internal const StringEscapeHandling DefaultStringEscapeHandling = StringEscapeHandling.Default;
internal const FormatterAssemblyStyle DefaultFormatterAssemblyStyle = FormatterAssemblyStyle.Simple;
internal static readonly CultureInfo DefaultCulture;
internal const bool DefaultCheckAdditionalContent = false;
internal const string DefaultDateFormatString = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK";
internal Formatting? _formatting;
internal DateFormatHandling? _dateFormatHandling;
internal DateTimeZoneHandling? _dateTimeZoneHandling;
internal DateParseHandling? _dateParseHandling;
internal FloatFormatHandling? _floatFormatHandling;
internal FloatParseHandling? _floatParseHandling;
internal StringEscapeHandling? _stringEscapeHandling;
internal CultureInfo _culture;
internal bool? _checkAdditionalContent;
internal int? _maxDepth;
internal bool _maxDepthSet;
internal string _dateFormatString;
internal bool _dateFormatStringSet;
internal FormatterAssemblyStyle? _typeNameAssemblyFormat;
internal DefaultValueHandling? _defaultValueHandling;
internal PreserveReferencesHandling? _preserveReferencesHandling;
internal NullValueHandling? _nullValueHandling;
internal ObjectCreationHandling? _objectCreationHandling;
internal MissingMemberHandling? _missingMemberHandling;
internal ReferenceLoopHandling? _referenceLoopHandling;
internal StreamingContext? _context;
internal ConstructorHandling? _constructorHandling;
internal TypeNameHandling? _typeNameHandling;
internal MetadataPropertyHandling? _metadataPropertyHandling;
///
/// Gets or sets how reference loops (e.g. a class referencing itself) is handled.
///
/// Reference loop handling.
public ReferenceLoopHandling ReferenceLoopHandling
{
get
{
return _referenceLoopHandling ?? ReferenceLoopHandling.Error;
}
set
{
_referenceLoopHandling = value;
}
}
///
/// Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization.
///
/// Missing member handling.
public MissingMemberHandling MissingMemberHandling
{
get
{
return _missingMemberHandling ?? MissingMemberHandling.Ignore;
}
set
{
_missingMemberHandling = value;
}
}
///
/// Gets or sets how objects are created during deserialization.
///
/// The object creation handling.
public ObjectCreationHandling ObjectCreationHandling
{
get
{
return _objectCreationHandling ?? ObjectCreationHandling.Auto;
}
set
{
_objectCreationHandling = value;
}
}
///
/// Gets or sets how null values are handled during serialization and deserialization.
///
/// Null value handling.
public NullValueHandling NullValueHandling
{
get
{
return _nullValueHandling ?? NullValueHandling.Include;
}
set
{
_nullValueHandling = value;
}
}
///
/// Gets or sets how null default are handled during serialization and deserialization.
///
/// The default value handling.
public DefaultValueHandling DefaultValueHandling
{
get
{
return _defaultValueHandling ?? DefaultValueHandling.Include;
}
set
{
_defaultValueHandling = value;
}
}
///
/// Gets or sets a collection that will be used during serialization.
///
/// The converters.
public IList Converters { get; set; }
///
/// Gets or sets how object references are preserved by the serializer.
///
/// The preserve references handling.
public PreserveReferencesHandling PreserveReferencesHandling
{
get
{
return _preserveReferencesHandling ?? PreserveReferencesHandling.None;
}
set
{
_preserveReferencesHandling = value;
}
}
///
/// Gets or sets how type name writing and reading is handled by the serializer.
///
///
/// should be used with caution when your application deserializes JSON from an external source.
/// Incoming types should be validated with a custom
/// when deserializing with a value other than TypeNameHandling.None.
///
/// The type name handling.
public TypeNameHandling TypeNameHandling
{
get
{
return _typeNameHandling ?? TypeNameHandling.None;
}
set
{
_typeNameHandling = value;
}
}
///
/// Gets or sets how metadata properties are used during deserialization.
///
/// The metadata properties handling.
public MetadataPropertyHandling MetadataPropertyHandling
{
get
{
return _metadataPropertyHandling ?? MetadataPropertyHandling.Default;
}
set
{
_metadataPropertyHandling = value;
}
}
///
/// Gets or sets how a type name assembly is written and resolved by the serializer.
///
/// The type name assembly format.
public FormatterAssemblyStyle TypeNameAssemblyFormat
{
get
{
return _typeNameAssemblyFormat ?? FormatterAssemblyStyle.Simple;
}
set
{
_typeNameAssemblyFormat = value;
}
}
///
/// Gets or sets how constructors are used during deserialization.
///
/// The constructor handling.
public ConstructorHandling ConstructorHandling
{
get
{
return _constructorHandling ?? ConstructorHandling.Default;
}
set
{
_constructorHandling = value;
}
}
///
/// Gets or sets the contract resolver used by the serializer when
/// serializing .NET objects to JSON and vice versa.
///
/// The contract resolver.
public IContractResolver ContractResolver { get; set; }
///
/// Gets or sets the equality comparer used by the serializer when comparing references.
///
/// The equality comparer.
public IEqualityComparer EqualityComparer { get; set; }
///
/// Gets or sets the used by the serializer when resolving references.
///
/// The reference resolver.
[Obsolete("ReferenceResolver property is obsolete. Use the ReferenceResolverProvider property to set the IReferenceResolver: settings.ReferenceResolverProvider = () => resolver")]
public IReferenceResolver ReferenceResolver
{
get
{
if (ReferenceResolverProvider == null)
{
return null;
}
return ReferenceResolverProvider();
}
set
{
ReferenceResolverProvider = ((value != null) ? ((Func)(() => value)) : null);
}
}
///
/// Gets or sets a function that creates the used by the serializer when resolving references.
///
/// A function that creates the used by the serializer when resolving references.
public Func ReferenceResolverProvider { get; set; }
///
/// Gets or sets the used by the serializer when writing trace messages.
///
/// The trace writer.
public ITraceWriter TraceWriter { get; set; }
///
/// Gets or sets the used by the serializer when resolving type names.
///
/// The binder.
public SerializationBinder Binder { get; set; }
///
/// Gets or sets the error handler called during serialization and deserialization.
///
/// The error handler called during serialization and deserialization.
public EventHandler Error { get; set; }
///
/// Gets or sets the used by the serializer when invoking serialization callback methods.
///
/// The context.
public StreamingContext Context
{
get
{
return _context ?? DefaultContext;
}
set
{
_context = value;
}
}
///
/// Get or set how and values are formatted when writing JSON text, and the expected date format when reading JSON text.
///
public string DateFormatString
{
get
{
return _dateFormatString ?? "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK";
}
set
{
_dateFormatString = value;
_dateFormatStringSet = true;
}
}
///
/// Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a .
///
public int? MaxDepth
{
get
{
return _maxDepth;
}
set
{
if (value <= 0)
{
throw new ArgumentException("Value must be positive.", "value");
}
_maxDepth = value;
_maxDepthSet = true;
}
}
///
/// Indicates how JSON text output is formatted.
///
public Formatting Formatting
{
get
{
return _formatting ?? Formatting.None;
}
set
{
_formatting = value;
}
}
///
/// Get or set how dates are written to JSON text.
///
public DateFormatHandling DateFormatHandling
{
get
{
return _dateFormatHandling ?? DateFormatHandling.IsoDateFormat;
}
set
{
_dateFormatHandling = value;
}
}
///
/// Get or set how time zones are handling during serialization and deserialization.
///
public DateTimeZoneHandling DateTimeZoneHandling
{
get
{
return _dateTimeZoneHandling ?? DateTimeZoneHandling.RoundtripKind;
}
set
{
_dateTimeZoneHandling = value;
}
}
///
/// Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON.
///
public DateParseHandling DateParseHandling
{
get
{
return _dateParseHandling ?? DateParseHandling.DateTime;
}
set
{
_dateParseHandling = value;
}
}
///
/// Get or set how special floating point numbers, e.g. ,
/// and ,
/// are written as JSON.
///
public FloatFormatHandling FloatFormatHandling
{
get
{
return _floatFormatHandling ?? FloatFormatHandling.String;
}
set
{
_floatFormatHandling = value;
}
}
///
/// Get or set how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text.
///
public FloatParseHandling FloatParseHandling
{
get
{
return _floatParseHandling ?? FloatParseHandling.Double;
}
set
{
_floatParseHandling = value;
}
}
///
/// Get or set how strings are escaped when writing JSON text.
///
public StringEscapeHandling StringEscapeHandling
{
get
{
return _stringEscapeHandling ?? StringEscapeHandling.Default;
}
set
{
_stringEscapeHandling = value;
}
}
///
/// Gets or sets the culture used when reading JSON. Defaults to .
///
public CultureInfo Culture
{
get
{
return _culture ?? DefaultCulture;
}
set
{
_culture = value;
}
}
///
/// Gets a value indicating whether there will be a check for additional content after deserializing an object.
///
///
/// true if there will be a check for additional content after deserializing an object; otherwise, false.
///
public bool CheckAdditionalContent
{
get
{
return _checkAdditionalContent ?? false;
}
set
{
_checkAdditionalContent = value;
}
}
static JsonSerializerSettings()
{
DefaultContext = default(StreamingContext);
DefaultCulture = CultureInfo.InvariantCulture;
}
///
/// Initializes a new instance of the class.
///
public JsonSerializerSettings()
{
Converters = new List();
}
}
}