示例#1
0
 internal static void WriteValue(JsonWriter writer, PrimitiveTypeCode typeCode, object value)
 {
     switch (typeCode)
     {
         case PrimitiveTypeCode.Char:
             writer.WriteValue((char)value);
             break;
         case PrimitiveTypeCode.CharNullable:
             writer.WriteValue((value == null) ? (char?)null : (char)value);
             break;
         case PrimitiveTypeCode.Boolean:
             writer.WriteValue((bool)value);
             break;
         case PrimitiveTypeCode.BooleanNullable:
             writer.WriteValue((value == null) ? (bool?)null : (bool)value);
             break;
         case PrimitiveTypeCode.SByte:
             writer.WriteValue((sbyte)value);
             break;
         case PrimitiveTypeCode.SByteNullable:
             writer.WriteValue((value == null) ? (sbyte?)null : (sbyte)value);
             break;
         case PrimitiveTypeCode.Int16:
             writer.WriteValue((short)value);
             break;
         case PrimitiveTypeCode.Int16Nullable:
             writer.WriteValue((value == null) ? (short?)null : (short)value);
             break;
         case PrimitiveTypeCode.UInt16:
             writer.WriteValue((ushort)value);
             break;
         case PrimitiveTypeCode.UInt16Nullable:
             writer.WriteValue((value == null) ? (ushort?)null : (ushort)value);
             break;
         case PrimitiveTypeCode.Int32:
             writer.WriteValue((int)value);
             break;
         case PrimitiveTypeCode.Int32Nullable:
             writer.WriteValue((value == null) ? (int?)null : (int)value);
             break;
         case PrimitiveTypeCode.Byte:
             writer.WriteValue((byte)value);
             break;
         case PrimitiveTypeCode.ByteNullable:
             writer.WriteValue((value == null) ? (byte?)null : (byte)value);
             break;
         case PrimitiveTypeCode.UInt32:
             writer.WriteValue((uint)value);
             break;
         case PrimitiveTypeCode.UInt32Nullable:
             writer.WriteValue((value == null) ? (uint?)null : (uint)value);
             break;
         case PrimitiveTypeCode.Int64:
             writer.WriteValue((long)value);
             break;
         case PrimitiveTypeCode.Int64Nullable:
             writer.WriteValue((value == null) ? (long?)null : (long)value);
             break;
         case PrimitiveTypeCode.UInt64:
             writer.WriteValue((ulong)value);
             break;
         case PrimitiveTypeCode.UInt64Nullable:
             writer.WriteValue((value == null) ? (ulong?)null : (ulong)value);
             break;
         case PrimitiveTypeCode.Single:
             writer.WriteValue((float)value);
             break;
         case PrimitiveTypeCode.SingleNullable:
             writer.WriteValue((value == null) ? (float?)null : (float)value);
             break;
         case PrimitiveTypeCode.Double:
             writer.WriteValue((double)value);
             break;
         case PrimitiveTypeCode.DoubleNullable:
             writer.WriteValue((value == null) ? (double?)null : (double)value);
             break;
         case PrimitiveTypeCode.DateTime:
             writer.WriteValue((DateTime)value);
             break;
         case PrimitiveTypeCode.DateTimeNullable:
             writer.WriteValue((value == null) ? (DateTime?)null : (DateTime)value);
             break;
     #if !NET20
         case PrimitiveTypeCode.DateTimeOffset:
             writer.WriteValue((DateTimeOffset)value);
             break;
         case PrimitiveTypeCode.DateTimeOffsetNullable:
             writer.WriteValue((value == null) ? (DateTimeOffset?)null : (DateTimeOffset)value);
             break;
     #endif
         case PrimitiveTypeCode.Decimal:
             writer.WriteValue((decimal)value);
             break;
         case PrimitiveTypeCode.DecimalNullable:
             writer.WriteValue((value == null) ? (decimal?)null : (decimal)value);
             break;
         case PrimitiveTypeCode.Guid:
             writer.WriteValue((Guid)value);
             break;
         case PrimitiveTypeCode.GuidNullable:
             writer.WriteValue((value == null) ? (Guid?)null : (Guid)value);
             break;
         case PrimitiveTypeCode.TimeSpan:
             writer.WriteValue((TimeSpan)value);
             break;
         case PrimitiveTypeCode.TimeSpanNullable:
             writer.WriteValue((value == null) ? (TimeSpan?)null : (TimeSpan)value);
             break;
         case PrimitiveTypeCode.Uri:
             writer.WriteValue((Uri)value);
             break;
         case PrimitiveTypeCode.String:
             writer.WriteValue((string)value);
             break;
         case PrimitiveTypeCode.Bytes:
             writer.WriteValue((byte[])value);
             break;
         default:
             {
                 throw CreateUnsupportedTypeException(writer, value);
             }
     }
 }
示例#2
0
 /// <summary>
 /// Writes the JSON representation of the object.
 /// </summary>
 /// <param name="writer">The <see cref="JsonWriter"/> to write to.</param>
 /// <param name="value">The value.</param>
 /// <param name="serializer">The calling serializer.</param>
 public abstract void WriteJson(JsonWriter writer, object value, JsonSerializer serializer);
        /// <summary>
        /// Generates GeoJson for the given geometry collection.
        /// </summary>
        /// <param name="writer"></param>
        /// <param name="geometryCollection"></param>
        internal static void Write(JsonWriter writer, GeometryCollection geometryCollection)
        {
            if (writer == null) { throw new ArgumentNullException("writer"); }
            if (geometryCollection == null) { throw new ArgumentNullException("geometryCollection"); }

            writer.WriteStartObject();
            writer.WritePropertyName("type");
            writer.WriteValue("GeometryCollection");
            writer.WritePropertyName("geometries");
            writer.WriteStartArray();
            foreach (var geometry in geometryCollection)
            {
                GeoJsonConverter.Write(writer, geometry);
            }
            writer.WriteEndArray();
            writer.WriteEndObject();
        }
示例#4
0
 private static JsonWriterException CreateUnsupportedTypeException(JsonWriter writer, object value)
 {
     return JsonWriterException.Create(writer, "Unsupported type: {0}. Use the JsonSerializer class to get the object's JSON representation.".FormatWith(CultureInfo.InvariantCulture, value.GetType()), null);
 }
        /// <summary>
        /// Generates GeoJson for the given geometry.
        /// </summary>
        /// <param name="writer"></param>
        /// <param name="geometry"></param>
        /// <returns></returns>
        internal static void Write(JsonWriter writer, Polygon geometry)
        {
            if (writer == null) { throw new ArgumentNullException("writer"); }
            if (geometry == null) { throw new ArgumentNullException("geometry"); }

            writer.WriteStartObject();
            writer.WritePropertyName("type");
            writer.WriteValue("Polygon");
            writer.WritePropertyName("coordinates");
            writer.WriteStartArray();
            writer.WriteStartArray();
            foreach (var coordinate in geometry.Ring.Coordinates)
            {
                writer.WriteStartArray();
                writer.WriteValue(coordinate.Longitude);
                writer.WriteValue(coordinate.Latitude);
                writer.WriteEndArray();
            }
            writer.WriteEndArray();
            foreach(var hole in geometry.Holes)
            {
                writer.WriteStartArray();
                foreach (var coordinate in hole.Coordinates)
                {
                    writer.WriteStartArray();
                    writer.WriteValue(coordinate.Longitude);
                    writer.WriteValue(coordinate.Latitude);
                    writer.WriteEndArray();
                }
                writer.WriteEndArray();
            }
            writer.WriteEndArray();
            writer.WriteEndObject();
        }
        /// <summary>
        /// Generates GeoJson for the given geometry.
        /// </summary>
        /// <param name="writer"></param>
        /// <param name="geometry"></param>
        /// <returns></returns>
        internal static void Write(JsonWriter writer, Point geometry)
        {
            if (writer == null) { throw new ArgumentNullException("writer"); }
            if (geometry == null) { throw new ArgumentNullException("geometry"); }

            writer.WriteStartObject();
            writer.WritePropertyName("type");
            writer.WriteValue("Point");
            writer.WritePropertyName("coordinates");
            writer.WriteStartArray();
            writer.WriteValue(geometry.Coordinate.Longitude);
            writer.WriteValue(geometry.Coordinate.Latitude);
            writer.WriteEndArray();
            writer.WriteEndObject();
        }
        /// <summary>
        /// Generates GeoJson for the given geometry.
        /// </summary>
        /// <param name="writer"></param>
        /// <param name="geometry"></param>
        internal static void Write(JsonWriter writer, Geometry geometry)
        {
            if (writer == null) { throw new ArgumentNullException("writer"); }
            if (geometry == null) { throw new ArgumentNullException("geometry"); }

            if (geometry is LineairRing)
            {
                GeoJsonConverter.Write(writer, geometry as LineairRing);
            }
            else if (geometry is Point)
            {
                GeoJsonConverter.Write(writer, geometry as Point);
            }
            else if (geometry is LineString)
            {
                GeoJsonConverter.Write(writer, geometry as LineString);
            }
            else if (geometry is Polygon)
            {
                GeoJsonConverter.Write(writer, geometry as Polygon);
            }
            else if (geometry is MultiPoint)
            {
                GeoJsonConverter.Write(writer, geometry as MultiPoint);
            }
            else if (geometry is MultiPolygon)
            {
                GeoJsonConverter.Write(writer, geometry as MultiPolygon);
            }
            else if (geometry is MultiLineString)
            {
                GeoJsonConverter.Write(writer, geometry as MultiLineString);
            }
            else if (geometry is GeometryCollection)
            {
                GeoJsonConverter.Write(writer, geometry as GeometryCollection);
            }
            else
            {
                throw new Exception(string.Format("Unknown geometry of type: {0}", geometry.GetType()));
            }
        }
        /// <summary>
        /// Generates GeoJson for the given geometry collection.
        /// </summary>
        /// <param name="writer"></param>
        /// <param name="geometryCollection"></param>
        internal static void Write(JsonWriter writer, MultiLineString geometryCollection)
        {
            if (writer == null) { throw new ArgumentNullException("writer"); }
            if (geometryCollection == null) { throw new ArgumentNullException("geometryCollection"); }

            writer.WriteStartObject();
            writer.WritePropertyName("type");
            writer.WriteValue("MultiLineString");
            writer.WritePropertyName("coordinates");
            writer.WriteStartArray();
            foreach (var geometry in geometryCollection)
            {
                writer.WriteStartArray();
                foreach (var coordinate in geometry.Coordinates)
                {
                    writer.WriteStartArray();
                    writer.WriteValue(coordinate.Longitude);
                    writer.WriteValue(coordinate.Latitude);
                    writer.WriteEndArray();
                }
                writer.WriteEndArray();
            }
            writer.WriteEndArray();
            writer.WriteEndObject();
        }
        /// <summary>
        /// Generates GeoJson for the given attribute collection.
        /// </summary>
        /// <param name="writer"></param>
        /// <param name="attributes"></param>
        internal static void Write(JsonWriter writer, GeometryAttributeCollection attributes)
        {
            if (writer == null) { throw new ArgumentNullException("writer"); }
            if (attributes == null) { throw new ArgumentNullException("attributes"); }

            writer.WriteStartObject();
            foreach (var attribute in attributes)
            {
                writer.WritePropertyName(attribute.Key);
                writer.WriteValue(attribute.Value);
            }
            writer.WriteEndObject();
        }
示例#10
0
        /// <summary>
        /// Generates GeoJson for the given feature.
        /// </summary>
        /// <param name="writer"></param>
        /// <param name="feature"></param>
        internal static void Write(JsonWriter writer, Feature feature)
        {
            if (writer == null) { throw new ArgumentNullException("writer"); }
            if (feature == null) { throw new ArgumentNullException("feature"); }

            writer.WriteStartObject();
            writer.WritePropertyName("type");
            writer.WriteValue("Feature");
            writer.WritePropertyName("properties");
            GeoJsonConverter.Write(writer, feature.Attributes);
            writer.WritePropertyName("geometry");
            GeoJsonConverter.Write(writer, feature.Geometry);
            writer.WriteEndObject();
        }
示例#11
0
        /// <summary>
        /// Generates GeoJson for the given feature collection.
        /// </summary>
        /// <param name="writer"></param>
        /// <param name="featureCollection"></param>
        internal static void Write(JsonWriter writer, FeatureCollection featureCollection)
        {
            if (writer == null) { throw new ArgumentNullException("writer"); }
            if (featureCollection == null) { throw new ArgumentNullException("featureCollection"); }

            writer.WriteStartObject();
            writer.WritePropertyName("type");
            writer.WriteValue("FeatureCollection");
            writer.WritePropertyName("features");
            writer.WriteStartArray();
            foreach(var feature in featureCollection)
            {
                GeoJsonConverter.Write(writer, feature);
            }
            writer.WriteEndArray();
            writer.WriteEndObject();
        }
示例#12
0
        /// <summary>
        /// Generates GeoJson for the given attribute collection.
        /// </summary>
        /// <param name="writer"></param>
        /// <param name="attributes"></param>
        internal static void Write(JsonWriter writer, GeometryAttributeCollection attributes)
        {
            if (writer == null) { throw new ArgumentNullException("writer"); }
            if (attributes == null) { throw new ArgumentNullException("attributes"); }

            writer.WriteStartObject();
            var keys = new HashSet<string>();
            foreach (var attribute in attributes)
            {
                if (!keys.Contains(attribute.Key))
                {
                    writer.WritePropertyName(attribute.Key);
                    writer.WriteValue(attribute.Value);
                    keys.Add(attribute.Key);
                }
            }
            writer.WriteEndObject();
        }
示例#13
0
 internal static JsonWriterException Create(JsonWriter writer, string message, Exception ex)
 {
     return Create(writer.ContainerPath, message, ex);
 }