Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SystemResources.cs
- MetaType.cs
- OdbcDataReader.cs
- SecurityTraceRecordHelper.cs
- UpdateCompiler.cs
- UnsafeNativeMethods.cs
- UserUseLicenseDictionaryLoader.cs
- ExpressionBuilder.cs
- GuidConverter.cs
- LambdaCompiler.Unary.cs
- SqlProvider.cs
- Internal.cs
- InfoCardClaim.cs
- _AutoWebProxyScriptHelper.cs
- CompatibleIComparer.cs
- ComAdminWrapper.cs
- ITextView.cs
- COAUTHIDENTITY.cs
- ExecutionContext.cs
- ClientFormsIdentity.cs
- CmsUtils.cs
- _NativeSSPI.cs
- MetricEntry.cs
- WindowAutomationPeer.cs
- NumberSubstitution.cs
- CompareInfo.cs
- SqlDeflator.cs
- CursorInteropHelper.cs
- XmlSchemaAppInfo.cs
- TouchFrameEventArgs.cs
- Delegate.cs
- DataControlImageButton.cs
- Evaluator.cs
- TreeNodeCollection.cs
- AnnotationService.cs
- HtmlElementErrorEventArgs.cs
- InkCollectionBehavior.cs
- HierarchicalDataSourceControl.cs
- WeakReadOnlyCollection.cs
- FileVersionInfo.cs
- XmlSerializerVersionAttribute.cs
- DefaultValueAttribute.cs
- ServiceObjectContainer.cs
- XmlBinaryReader.cs
- Font.cs
- AuthenticationModuleElement.cs
- DataGridViewCheckBoxColumn.cs
- NavigateEvent.cs
- FontFamily.cs
- Polyline.cs
- Point3DKeyFrameCollection.cs
- CharacterString.cs
- AuthorizationSection.cs
- XmlIncludeAttribute.cs
- RoleBoolean.cs
- VectorAnimationUsingKeyFrames.cs
- StaticExtensionConverter.cs
- Matrix3D.cs
- MonitorWrapper.cs
- SoapObjectInfo.cs
- XmlWhitespace.cs
- StaticSiteMapProvider.cs
- ImageDesigner.cs
- SQLInt16Storage.cs
- EntityClientCacheKey.cs
- ToolBarPanel.cs
- RichTextBoxConstants.cs
- ConfigurationFileMap.cs
- Image.cs
- MediaCommands.cs
- ManagementEventWatcher.cs
- FileLogRecordStream.cs
- GeometryCombineModeValidation.cs
- ArrayExtension.cs
- GetLedgerRequest.cs
- QilValidationVisitor.cs
- SqlRetyper.cs
- WebPartConnection.cs
- ErrorHandler.cs
- ApplicationServicesHostFactory.cs
- _DomainName.cs
- ConnectionManagementSection.cs
- DecimalConstantAttribute.cs
- Brush.cs
- BasicExpandProvider.cs
- assertwrapper.cs
- LogManagementAsyncResult.cs
- HttpModulesInstallComponent.cs
- DecimalAnimationUsingKeyFrames.cs
- ClientConvert.cs
- HttpRuntimeSection.cs
- Image.cs
- Brush.cs
- EventHandlerList.cs
- MessageQueuePermissionEntry.cs
- OutputCacheProviderCollection.cs
- _Win32.cs
- DataBindingHandlerAttribute.cs
- UpdateCompiler.cs
- SafeArrayTypeMismatchException.cs