Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / Serialization / System / Runtime / Serialization / Json / JsonObjectDataContract.cs / 1305376 / JsonObjectDataContract.cs
//---------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------- namespace System.Runtime.Serialization.Json { using System.Xml; using System.ServiceModel; using System.Runtime.Serialization; using System.Globalization; class JsonObjectDataContract : JsonDataContract { public JsonObjectDataContract(DataContract traditionalDataContract) : base(traditionalDataContract) { } public override object ReadJsonValueCore(XmlReaderDelegator jsonReader, XmlObjectSerializerReadContextComplexJson context) { object obj; string contentMode = jsonReader.GetAttribute(JsonGlobals.typeString); switch (contentMode) { case JsonGlobals.nullString: jsonReader.Skip(); obj = null; break; case JsonGlobals.booleanString: obj = jsonReader.ReadElementContentAsBoolean(); break; case JsonGlobals.stringString: case null: obj = jsonReader.ReadElementContentAsString(); break; case JsonGlobals.numberString: obj = ParseJsonNumber(jsonReader.ReadElementContentAsString()); break; case JsonGlobals.objectString: jsonReader.Skip(); obj = new object(); break; case JsonGlobals.arrayString: // Read as object array return DataContractJsonSerializer.ReadJsonValue(DataContract.GetDataContract(Globals.TypeOfObjectArray), jsonReader, context); default: throw DiagnosticUtility.ExceptionUtility.ThrowHelperError( XmlObjectSerializer.CreateSerializationException(SR.GetString(SR.JsonUnexpectedAttributeValue, contentMode))); } if (context != null) { context.AddNewObject(obj); } return obj; } public override void WriteJsonValueCore(XmlWriterDelegator jsonWriter, object obj, XmlObjectSerializerWriteContextComplexJson context, RuntimeTypeHandle declaredTypeHandle) { jsonWriter.WriteAttributeString(null, JsonGlobals.typeString, null, JsonGlobals.objectString); } internal static object ParseJsonNumber(string value, out TypeCode objectTypeCode) { if (value == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new XmlException(System.Runtime.Serialization.SR.GetString(System.Runtime.Serialization.SR.XmlInvalidConversion, value, Globals.TypeOfInt))); } if (value.IndexOfAny(JsonGlobals.floatingPointCharacters) == -1) { int intValue; if (Int32.TryParse(value, NumberStyles.Float, NumberFormatInfo.InvariantInfo, out intValue)) { objectTypeCode = TypeCode.Int32; return intValue; } long longValue; if (Int64.TryParse(value, NumberStyles.Float, NumberFormatInfo.InvariantInfo, out longValue)) { objectTypeCode = TypeCode.Int64; return longValue; } } decimal decimalValue; if (Decimal.TryParse(value, NumberStyles.Float, NumberFormatInfo.InvariantInfo, out decimalValue)) { objectTypeCode = TypeCode.Decimal; //check for decimal underflow if (decimalValue == Decimal.Zero) { double doubleValue = XmlConverter.ToDouble(value); if (doubleValue != 0.0) { objectTypeCode = TypeCode.Double; return doubleValue; } } return decimalValue; } objectTypeCode = TypeCode.Double; return XmlConverter.ToDouble(value); } static object ParseJsonNumber(string value) { TypeCode unusedTypeCode; return ParseJsonNumber(value, out unusedTypeCode); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------- namespace System.Runtime.Serialization.Json { using System.Xml; using System.ServiceModel; using System.Runtime.Serialization; using System.Globalization; class JsonObjectDataContract : JsonDataContract { public JsonObjectDataContract(DataContract traditionalDataContract) : base(traditionalDataContract) { } public override object ReadJsonValueCore(XmlReaderDelegator jsonReader, XmlObjectSerializerReadContextComplexJson context) { object obj; string contentMode = jsonReader.GetAttribute(JsonGlobals.typeString); switch (contentMode) { case JsonGlobals.nullString: jsonReader.Skip(); obj = null; break; case JsonGlobals.booleanString: obj = jsonReader.ReadElementContentAsBoolean(); break; case JsonGlobals.stringString: case null: obj = jsonReader.ReadElementContentAsString(); break; case JsonGlobals.numberString: obj = ParseJsonNumber(jsonReader.ReadElementContentAsString()); break; case JsonGlobals.objectString: jsonReader.Skip(); obj = new object(); break; case JsonGlobals.arrayString: // Read as object array return DataContractJsonSerializer.ReadJsonValue(DataContract.GetDataContract(Globals.TypeOfObjectArray), jsonReader, context); default: throw DiagnosticUtility.ExceptionUtility.ThrowHelperError( XmlObjectSerializer.CreateSerializationException(SR.GetString(SR.JsonUnexpectedAttributeValue, contentMode))); } if (context != null) { context.AddNewObject(obj); } return obj; } public override void WriteJsonValueCore(XmlWriterDelegator jsonWriter, object obj, XmlObjectSerializerWriteContextComplexJson context, RuntimeTypeHandle declaredTypeHandle) { jsonWriter.WriteAttributeString(null, JsonGlobals.typeString, null, JsonGlobals.objectString); } internal static object ParseJsonNumber(string value, out TypeCode objectTypeCode) { if (value == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new XmlException(System.Runtime.Serialization.SR.GetString(System.Runtime.Serialization.SR.XmlInvalidConversion, value, Globals.TypeOfInt))); } if (value.IndexOfAny(JsonGlobals.floatingPointCharacters) == -1) { int intValue; if (Int32.TryParse(value, NumberStyles.Float, NumberFormatInfo.InvariantInfo, out intValue)) { objectTypeCode = TypeCode.Int32; return intValue; } long longValue; if (Int64.TryParse(value, NumberStyles.Float, NumberFormatInfo.InvariantInfo, out longValue)) { objectTypeCode = TypeCode.Int64; return longValue; } } decimal decimalValue; if (Decimal.TryParse(value, NumberStyles.Float, NumberFormatInfo.InvariantInfo, out decimalValue)) { objectTypeCode = TypeCode.Decimal; //check for decimal underflow if (decimalValue == Decimal.Zero) { double doubleValue = XmlConverter.ToDouble(value); if (doubleValue != 0.0) { objectTypeCode = TypeCode.Double; return doubleValue; } } return decimalValue; } objectTypeCode = TypeCode.Double; return XmlConverter.ToDouble(value); } static object ParseJsonNumber(string value) { TypeCode unusedTypeCode; return ParseJsonNumber(value, out unusedTypeCode); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- InstancePersistenceEvent.cs
- TrackBarDesigner.cs
- HealthMonitoringSection.cs
- PropertyDescriptorComparer.cs
- HighlightComponent.cs
- TriggerAction.cs
- ToolStripDropDownMenu.cs
- PropertyStore.cs
- Converter.cs
- UnionCodeGroup.cs
- ButtonChrome.cs
- ToolStripLocationCancelEventArgs.cs
- WebPartEditorOkVerb.cs
- TraceProvider.cs
- ProcessThreadCollection.cs
- SettingsPropertyWrongTypeException.cs
- ThreadPool.cs
- ArrayList.cs
- WbemProvider.cs
- EventArgs.cs
- SystemWebCachingSectionGroup.cs
- RenderDataDrawingContext.cs
- BuildTopDownAttribute.cs
- SqlCharStream.cs
- ParameterBinding.cs
- QueryStringParameter.cs
- HtmlSelect.cs
- RefreshPropertiesAttribute.cs
- XmlUtil.cs
- Bezier.cs
- PermissionSetTriple.cs
- HttpProfileBase.cs
- ToolStripDropDownMenu.cs
- NameValueFileSectionHandler.cs
- FunctionMappingTranslator.cs
- AuthenticationService.cs
- XsdDataContractImporter.cs
- ImagingCache.cs
- HtmlMeta.cs
- HttpModuleActionCollection.cs
- serverconfig.cs
- SeekStoryboard.cs
- PeerObject.cs
- SqlSupersetValidator.cs
- DuplicateWaitObjectException.cs
- CodeParameterDeclarationExpression.cs
- User.cs
- ElementAction.cs
- ReadOnlyMetadataCollection.cs
- ControlPropertyNameConverter.cs
- SessionEndedEventArgs.cs
- CompositeDesignerAccessibleObject.cs
- WindowShowOrOpenTracker.cs
- GridViewColumnHeaderAutomationPeer.cs
- XmlSchemaAnnotated.cs
- XamlTypeMapper.cs
- Merger.cs
- DbgCompiler.cs
- COM2ColorConverter.cs
- TimersDescriptionAttribute.cs
- PixelFormat.cs
- QuaternionValueSerializer.cs
- DayRenderEvent.cs
- PostBackOptions.cs
- ComboBoxRenderer.cs
- PageThemeParser.cs
- Helpers.cs
- ReturnValue.cs
- EntityRecordInfo.cs
- DefinitionUpdate.cs
- GrammarBuilderWildcard.cs
- cookieexception.cs
- ReflectionPermission.cs
- FaultException.cs
- CodePrimitiveExpression.cs
- RuntimeHandles.cs
- CustomAttributeBuilder.cs
- ClosureBinding.cs
- DisplayInformation.cs
- InertiaTranslationBehavior.cs
- FullTextState.cs
- SystemException.cs
- ScrollEventArgs.cs
- XmlnsCache.cs
- PrinterUnitConvert.cs
- ListViewTableCell.cs
- ResourceProperty.cs
- ContextMenuStrip.cs
- SystemResources.cs
- TriggerBase.cs
- PersonalizationProviderHelper.cs
- NumericUpDownAcceleration.cs
- SByteStorage.cs
- CodeAttachEventStatement.cs
- ListViewUpdateEventArgs.cs
- XmlAnyElementAttribute.cs
- XXXOnTypeBuilderInstantiation.cs
- TableLayoutPanelCellPosition.cs
- TableHeaderCell.cs
- DetailsViewDeleteEventArgs.cs