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
- PublisherIdentityPermission.cs
- RecognizedAudio.cs
- SafeNativeMethodsOther.cs
- UndirectedGraph.cs
- Attachment.cs
- Win32.cs
- ToolStripButton.cs
- ImageSourceValueSerializer.cs
- CodeCastExpression.cs
- SubstitutionResponseElement.cs
- MaskInputRejectedEventArgs.cs
- Constraint.cs
- MimeMultiPart.cs
- InvokeWebServiceDesigner.cs
- SafeNativeMethods.cs
- RawUIStateInputReport.cs
- HMACRIPEMD160.cs
- Line.cs
- BitStream.cs
- CaseInsensitiveHashCodeProvider.cs
- WeakReferenceEnumerator.cs
- DataRecordInfo.cs
- GlyphManager.cs
- ReleaseInstanceMode.cs
- HealthMonitoringSectionHelper.cs
- FixedDocumentSequencePaginator.cs
- XmlValidatingReader.cs
- RelationalExpressions.cs
- ResourcesGenerator.cs
- SchemaHelper.cs
- OrderedDictionary.cs
- ObfuscateAssemblyAttribute.cs
- InvalidPrinterException.cs
- SQLRoleProvider.cs
- PositiveTimeSpanValidator.cs
- _NegoState.cs
- _WebProxyDataBuilder.cs
- validationstate.cs
- PenContext.cs
- DesignerTextWriter.cs
- TouchDevice.cs
- HttpUnhandledOperationInvoker.cs
- InvalidCommandTreeException.cs
- OdbcEnvironmentHandle.cs
- HtmlInputRadioButton.cs
- SqlDataSourceView.cs
- EventLogInternal.cs
- SoapAttributes.cs
- JulianCalendar.cs
- SectionXmlInfo.cs
- MsmqReceiveParameters.cs
- PublisherMembershipCondition.cs
- ExpressionBinding.cs
- SafeNativeMethods.cs
- TextBlockAutomationPeer.cs
- GPStream.cs
- Column.cs
- ArcSegment.cs
- ProtectedUri.cs
- Help.cs
- OdbcConnection.cs
- ConfigurationSettings.cs
- XpsResource.cs
- MessageSecurityException.cs
- LinkTarget.cs
- EncoderParameter.cs
- PageCache.cs
- WriteFileContext.cs
- ProjectedSlot.cs
- PageCodeDomTreeGenerator.cs
- SqlTrackingWorkflowInstance.cs
- SemanticValue.cs
- DataGridHeaderBorder.cs
- GridViewEditEventArgs.cs
- DBDataPermission.cs
- DiffuseMaterial.cs
- BitmapEffectState.cs
- ContentFileHelper.cs
- ListItem.cs
- NodeLabelEditEvent.cs
- HtmlButton.cs
- ComponentRenameEvent.cs
- ApplicationSecurityManager.cs
- FamilyMap.cs
- ServiceModelStringsVersion1.cs
- RtfControlWordInfo.cs
- GeometryGroup.cs
- DataGridViewRow.cs
- Source.cs
- ItemsControlAutomationPeer.cs
- PropertyGrid.cs
- RepeaterCommandEventArgs.cs
- StreamInfo.cs
- PtsHost.cs
- ConstructorNeedsTagAttribute.cs
- Utility.cs
- SubclassTypeValidator.cs
- Task.cs
- TrackingQuery.cs
- AbandonedMutexException.cs