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
- TransformGroup.cs
- FixedSOMLineCollection.cs
- PtsHost.cs
- DrawingGroupDrawingContext.cs
- PeerName.cs
- DropShadowEffect.cs
- GeometryDrawing.cs
- RequestUriProcessor.cs
- EventLog.cs
- BitmapEffect.cs
- BinaryReader.cs
- _WebProxyDataBuilder.cs
- XmlDocument.cs
- WorkflowInstance.cs
- ThrowHelper.cs
- EntityProviderServices.cs
- ModelPropertyCollectionImpl.cs
- CatalogPartDesigner.cs
- ToolBarPanel.cs
- VirtualizingPanel.cs
- SqlInternalConnectionSmi.cs
- FileAccessException.cs
- XmlLinkedNode.cs
- SqlUdtInfo.cs
- BitStream.cs
- Line.cs
- FixedSOMElement.cs
- BoolExpr.cs
- EmissiveMaterial.cs
- DbDataAdapter.cs
- PrivilegedConfigurationManager.cs
- ApplicationTrust.cs
- DataGridTextColumn.cs
- HMACSHA512.cs
- RepeaterCommandEventArgs.cs
- MissingFieldException.cs
- AQNBuilder.cs
- ListenerServiceInstallComponent.cs
- RangeEnumerable.cs
- ActivityAction.cs
- MethodCallTranslator.cs
- XPathAxisIterator.cs
- DataContext.cs
- NodeLabelEditEvent.cs
- TdsParameterSetter.cs
- WinInet.cs
- CounterSampleCalculator.cs
- NativeMethods.cs
- XmlBoundElement.cs
- CharConverter.cs
- WaitHandle.cs
- TdsParameterSetter.cs
- CodeEntryPointMethod.cs
- ManifestResourceInfo.cs
- SequenceFullException.cs
- StylusButton.cs
- TrackingExtract.cs
- DbTransaction.cs
- XmlDocumentFragment.cs
- ISessionStateStore.cs
- WebPartVerbsEventArgs.cs
- VectorKeyFrameCollection.cs
- Renderer.cs
- IgnoreSectionHandler.cs
- ProxyGenerationError.cs
- PropertyEmitter.cs
- ObjectStateFormatter.cs
- WindowsMenu.cs
- SecurityException.cs
- UIAgentAsyncBeginRequest.cs
- ListBoxAutomationPeer.cs
- EncryptedKeyIdentifierClause.cs
- configsystem.cs
- HttpListenerException.cs
- CodeDomSerializerBase.cs
- InheritanceAttribute.cs
- RawUIStateInputReport.cs
- Vars.cs
- RenderDataDrawingContext.cs
- ToolBarOverflowPanel.cs
- CodeDomExtensionMethods.cs
- DiscoveryDocumentSearchPattern.cs
- TextProperties.cs
- MenuDesigner.cs
- ToolStripOverflow.cs
- ChannelFactoryBase.cs
- TransformGroup.cs
- Point.cs
- HwndSource.cs
- HyperlinkAutomationPeer.cs
- MenuRendererStandards.cs
- HelpProvider.cs
- EncodingTable.cs
- ReadOnlyDataSourceView.cs
- WhiteSpaceTrimStringConverter.cs
- SoapTypeAttribute.cs
- HttpWebRequest.cs
- ScriptResourceHandler.cs
- WebPartZoneDesigner.cs
- TextProviderWrapper.cs