首页 > 解决方案 > 如何序列化 Microsoft.SqlServer.Types?

问题描述

我试图序列DbGeometryBinaryFormatter

var geom = DbGeometry.FromText(
                "GEOMETRYCOLLECTION (LINESTRING (1536021.428998508 393535.08032309468, 1536019.3418569998 393530.55922777555), LINESTRING (1536072.0834590872 393531.209805237, 1536071.0506221838 393523.76857564115), CURVEPOLYGON (COMPOUNDCURVE (CIRCULARSTRING (1536071.0299999998 393523.47, 1536071.1360660172 393523.51393398282, 1536071.18 393523.62, 1536071.1431292463 393523.7184975819, 1536071.0506430182 393523.76857276267), (1536071.0506430182 393523.76857276267, 1536071.0506221838 393523.76857564115, 1536071.0504150861 393523.76860425383), CIRCULARSTRING (1536071.0504150861 393523.76860425383, 1536070.9313289959 393523.73297801986, 1536070.88 393523.62, 1536070.91732523 393523.52098284865, 1536071.0107252833 393523.47124353691), (1536071.0107252833 393523.47124353691, 1536071.010758074 393523.47123931372, 1536071.0109534955 393523.4712141449), CIRCULARSTRING (1536071.0109534955 393523.4712141449, 1536071.0205722363 393523.47029656888, 1536071.0299999998 393523.47))), LINESTRING (1536071.010758074 393523.47123931372, 1536067.219241926 393494.15876068623), CURVEPOLYGON (COMPOUNDCURVE (CIRCULARSTRING (1536067.2000000002 393493.86, 1536067.3060660174 393493.90393398283, 1536067.35 393494.01, 1536067.31267477 393494.10901715129, 1536067.2192747167 393494.15875646303), (1536067.2192747167 393494.15875646303, 1536067.219241926 393494.15876068623, 1536067.2190465045 393494.15878585505), CIRCULARSTRING (1536067.2190465045 393494.15878585505, 1536067.1008101243 393494.12252274685, 1536067.05 393494.01, 1536067.0871734724 393493.91115580604, 1536067.1802689957 393493.861303371), (1536067.1802689957 393493.861303371, 1536067.1804333476 393493.86128169094, 1536067.1804971166 393493.861273279), CIRCULARSTRING (1536067.1804971166 393493.861273279, 1536067.1903426053 393493.86031120707, 1536067.2000000002 393493.86))), LINESTRING (1536067.1804333476 393493.86128169094, 1536063.8895666525 393468.848718309), CURVEPOLYGON (COMPOUNDCURVE (CIRCULARSTRING (1536063.87 393468.55, 1536063.9760660173 393468.59393398283, 1536064.02 393468.7, 1536063.9828265277 393468.79884419392, 1536063.8897310044 393468.84869662893), (1536063.8897310044 393468.84869662893, 1536063.8895666525 393468.848718309, 1536063.8895028834 393468.84872672096), CIRCULARSTRING (1536063.8895028834 393468.84872672096, 1536063.7709828487 393468.81267476978, 1536063.72 393468.7, 1536063.7567197934 393468.60167607205, 1536063.8489012641 393468.55149126844), (1536063.8489012641 393468.55149126844, 1536063.8490675117 393468.55146777962, 1536063.8491290985 393468.55145907815), CIRCULARSTRING (1536063.8491290985 393468.55145907815, 1536063.8596538508 393468.55035723472, 1536063.87 393468.55))), LINESTRING (1536063.8490675117 393468.55146777962, 1536060.6684936497 393445.98283240461))");

var bf = new BinaryFormatter();
using (var ms = new MemoryStream())
{
  bf.Serialize(ms, geom);
}

并得到错误Serialize

System.Runtime.Serialization.SerializationException: Type 'Microsoft.SqlServer.Types.Segment' in Assembly 'Microsoft.SqlServer.Types, Version=13.0.0.0, Culture=neutral, PublicKeyToken=' is not marked as serializable.
 at System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType type)
 at System.Runtime.Serialization.FormatterServices.<>c__DisplayClass9_0.<GetSerializableMembers>b__0(MemberHolder _)
 at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
 at System.Runtime.Serialization.FormatterServices.GetSerializableMembers(Type type, StreamingContext context)
 at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo()
 at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Type objectType, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, SerializationBinder binder)
 at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.WriteArray(WriteObjectInfo objectInfo, NameInfo memberNameInfo, WriteObjectInfo memberObjectInfo)
 at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(WriteObjectInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo)
 at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck)
 at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck)

我做了一些测试,发现几何包含时出现错误:

 CURVEPOLYGON (COMPOUNDCURVE (CIRCULARSTRING (...)))

我能用它做什么?

标签: c#sql-serverserializationbinaryformatter

解决方案


推荐阅读