c# - 如何序列化 Microsoft.SqlServer.Types?
问题描述
我试图序列DbGeometry
化BinaryFormatter
:
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 (...)))
我能用它做什么?
解决方案
推荐阅读
- angular - Angular Material Autocomplete 设置滚动顶部
- batch-file - How to get grep to run command after found first response in line-buffer?
- c# - LINQ - 将当前和以前的数据合并到一行
- python - 将多条正文线转换为列表理解
- node.js - Mongoose findById 查询不返回结果。对象始终为空。
- git - 无法连接到存储库:无法创建 http 代理 uri
- python - 如何在 Django 中呈现多个表单
- python - dataframe combine_first does not work as well as fillna
- c# - 展平数据库中实体上的复杂对象
- java - 需要通过section id从HTML中获取href