Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带有NetTopologySuite.IO.GeoJSON的JsonConvert.DeserializeObject具有异常预期标记';}';找不到_C#_Json - Fatal编程技术网

C# 带有NetTopologySuite.IO.GeoJSON的JsonConvert.DeserializeObject具有异常预期标记';}';找不到

C# 带有NetTopologySuite.IO.GeoJSON的JsonConvert.DeserializeObject具有异常预期标记';}';找不到,c#,json,C#,Json,我有以下数据传输对象 [DataContract] public class Entity : IEntity { /// <summary> /// /// </summary> public Entity() { } /// <summary> /// /// /// /// </s

我有以下数据传输对象

[DataContract]
    public class Entity : IEntity
    {
        /// <summary>
        /// 
        /// </summary>
        public Entity() { }

        /// <summary>
        /// 
        /// 
        /// 
        /// </summary>
        [DataMember]
        [JsonPropertyName("ENAME")]
        [Display(Name = "ENAME")]
        public string ENAME { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [DataMember]
        [JsonPropertyName("ENTITY_DEF_I_EID")]
        [Display(Name = "Entity Def EID")]
        public int ENTITY_DEF_I_EID { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [DataMember]
        [JsonPropertyName("I_SID")]
        [Display(Name = "Server ID")]
        public int I_SID { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [DataMember]
        [JsonPropertyName("I_EID")]
        [Display(Name = "Entity ID")]
        public int I_EID { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [DataMember]
        [JsonPropertyName("F_DELETED")]
        [Display(Name = "Deleted")]
        public string F_DELETED { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [DataMember]
        [JsonPropertyName("S_LAST_MOD_INFO")]
        [Display(Name = "Last Modified Into")]
        public string S_LAST_MOD_INFO { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [DataMember]
        [JsonPropertyName("CUSTOM1")]
        [Display(Name = "Custom 1")]
        public string CUSTOM1 { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [DataMember]
        [JsonPropertyName("CUSTOM2")]
        [Display(Name = "Custom 2")]
        public string CUSTOM2 { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [DataMember]
        [JsonPropertyName("CUSTOM3")]
        [Display(Name = "Custom 3")]
        public string CUSTOM3 { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [DataMember]
        [JsonPropertyName("CUSTOM4")]
        [Display(Name = "Custom 4")]
        public string CUSTOM4 { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [DataMember]
        [JsonPropertyName("CUSTOM5")]
        [Display(Name = "Custom 5")]
        public string CUSTOM5 { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [DataMember]
        [JsonPropertyName("CUSTOM6")]
        [Display(Name = "Custom 6")]
        public string CUSTOM6 { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [DataMember]
        [JsonPropertyName("CUSTOM7")]
        [Display(Name = "Custom 7")]
        public string CUSTOM7 { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [DataMember]
        [JsonPropertyName("CUSTOM8")]
        [Display(Name = "Custom 8")]
        public string CUSTOM8 { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [DataMember]
        [JsonPropertyName("CUSTOM9")]
        [Display(Name = "Custom 9")]
        public string CUSTOM9 { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [DataMember]
        [JsonPropertyName("CUSTOM10")]
        [Display(Name = "Custom 10")]
        public string CUSTOM10 { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [DataMember]
        [JsonPropertyName("RESV1")]
        [Display(Name = "Reserved 1")]
        public string RESV1 { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [DataMember]
        [JsonPropertyName("RESV2")]
        [Display(Name = "Reserved 2")]
        public string RESV2 { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [DataMember]
        [JsonPropertyName("RESV3")]
        [Display(Name = "Reserved 3")]
        public string RESV3 { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [DataMember]
        [JsonPropertyName("RESV4")]
        [Display(Name = "Reserved 4")]
        public string RESV4 { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [DataMember]
        [JsonPropertyName("RESV5")]
        [Display(Name = "Reserved 5")]
        public string RESV5 { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [DataMember]
        [JsonPropertyName("FEATURE_DEF_NAME")]
        [Display(Name = "Feature Def Name")]
        public string FEATURE_DEF_NAME { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [DataMember]
        [JsonPropertyName("PHOTO")]
        [Display(Name = "Photo")]
        public string PHOTO { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [DataMember]
        [JsonPropertyName("DETAIL")]
        [Display(Name = "Detail")]
        public string DETAIL { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [DataMember]
        [JsonPropertyName("DOCUMENT")]
        [Display(Name = "Document")]
        public string DOCUMENT { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [DataMember]
        [JsonPropertyName("ACAD_COLOR")]
        [Display(Name = "Acad Color")]
        public decimal ACAD_COLOR { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [DataMember]
        [JsonPropertyName("ACAD_LAYER")]
        [Display(Name = "Layer")]
        public string ACAD_LAYER { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [DataMember]
        [JsonPropertyName("ATT_BLK")]
        [Display(Name = "Attribute Block")]
        public string ATT_BLK { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [DataMember]
        [JsonPropertyName("ATT_LAY")]
        [Display(Name = "Attribute Layer")]
        public string ATT_LAY { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [DataMember]
        [JsonPropertyName("TAG_ROT")]
        [Display(Name = "Tag Rotation")]
        public decimal TAG_ROT { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [DataMember]
        [JsonPropertyName("X_COORD")]
        [Display(Name = "X Coordinate")]
        public decimal X_COORD { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [DataMember]
        [JsonPropertyName("Y_COORD")]
        [Display(Name = "Y Coordinate")]
        public decimal Y_COORD { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [DataMember]
        [JsonPropertyName("Z_COORD")]
        [Display(Name = "Z Coordinate")]
        public decimal Z_COORD { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [DataMember]
        //[JsonPropertyName("GEOM")]
        //[JsonProperty(PropertyName = "GEOM", ItemConverterType = typeof(GeometryConverter))]
        [Newtonsoft.Json.JsonConverter(typeof(GeometryConverter))]
        [Display(Name = "Geometry")]
        public Geometry GEOM { get; set; }
    }
当ActionResult返回给客户机时,以下方法就是异常发生的地方

Private Function GetReturnList(ByVal objects As String) As IEnumerable(Of Entity)
    Dim _listReturn As IEnumerable(Of Entity)
    Dim _listEntity As List(Of Entity) = New List(Of Entity)

    Dim settings As JsonSerializerSettings = New JsonSerializerSettings()
    settings.TypeNameHandling = TypeNameHandling.Auto
    settings.NullValueHandling = NullValueHandling.Ignore

    If Not IsNothing(objects) Then
        _listEntity = JsonConvert.DeserializeObject(Of List(Of Entity))(objects, settings).AsEnumerable()
        Dim obj As Entity = _listEntity(0)

        Select Case obj.FEATURE_DEF_NAME
            Case "CO", "REMOTE_CO"
                _listReturn = JsonConvert.DeserializeObject(Of List(Of CT_CO))(objects, settings).Cast(Of Entity).AsEnumerable()

            Case "NETWORK_INTERFACE", "STATION_PROTECTOR"
                _listReturn = JsonConvert.DeserializeObject(Of List(Of CT_SBFAC))(objects, settings).Cast(Of Entity).AsEnumerable()

            Case "WORKORDER"
                _listReturn = JsonConvert.DeserializeObject(Of List(Of CT_WORKS))(objects, settings).Cast(Of Entity).AsEnumerable()

            Case "CUSTOMER"
                _listReturn = JsonConvert.DeserializeObject(Of List(Of CUSTOMER))(objects, settings).Cast(Of Entity).AsEnumerable()

            Case "FIBERS"
                _listReturn = JsonConvert.DeserializeObject(Of List(Of FIBERS))(objects, settings).Cast(Of Entity).AsEnumerable()

            Case "FIBER_SPLITTER"
                _listReturn = JsonConvert.DeserializeObject(Of List(Of FO_SPLITTER))(objects, settings).Cast(Of Entity).AsEnumerable()
        End Select

    End If


    Return _listReturn
End Function
当我尝试反序列化下一行上的json字符串对象时会出现异常:

_listEntity=JsonConvert.DeserializeObject(实体的列表))(对象、设置).AsEnumerable()

异常消息未找到预期的令牌“}”。

下面是抛出的异常的堆栈跟踪

   at NetTopologySuite.IO.Converters.GeometryConverter.ParseGeometry(JsonReader reader, JsonSerializer serializer)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.DeserializeConvertable(JsonConverter converter, JsonReader reader, Type objectType, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, Object target)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateList(IList list, JsonReader reader, JsonArrayContract contract, JsonProperty containerProperty, String id)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateList(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, Object existingValue, String id)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
   at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
   at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
   at CtPortalServices.Queries.Handler.GetLocateFeaturesQueryHandler.GetReturnList(String objects) in C:\Development\Matador\Spatial E-Suite\11.0\Clients\Commander\CtPortalServices\Domain\Queries\Handler\Locate\GetLocateFeaturesQueryHandler.vb:line 108
   at CtPortalServices.Queries.Handler.GetLocateFeaturesQueryHandler.GetReturnObject(IRestResponse response) in C:\Development\Matador\Spatial E-Suite\11.0\Clients\Commander\CtPortalServices\Domain\Queries\Handler\Locate\GetLocateFeaturesQueryHandler.vb:line 90
   at CtPortalServices.Queries.QueryHandler.Get() in C:\Development\Matador\Spatial E-Suite\11.0\Clients\Commander\CtPortalServices\Domain\Queries\QueryHandler.vb:line 237
有人能告诉我如何解决这个问题吗


提前谢谢你

您的GeoJSON格式不正确,或者您正试图使用GeoJSON转换器转换非GeoJSON格式的数据

根据第3.1节,坐标属性的值不应是对象,而应是数组。比如说,

“坐标”:{
“m”:0.0,
“z”:0.0,
“x”:-156.3413802,
“y”:20.725685900000003
}
应该是

“坐标”:[-156.3413802,20.725685900000003,0.0]
(我不确定如何处理
m
值,但在两个采样点中它都是零,所以我希望可以忽略它。)

RFC包含GeoJSON的更多示例

我不知道您是否有能力更改返回到RESTAPI的
坐标,但如果没有,您可能需要以其他方式解析JSON


遗憾的是,NetTopologySuite GeoJson转换器似乎并不擅长处理这种情况。一旦它开始处理第一个
坐标
属性,它似乎会一直处理JSON标记,直到它到达JSON数据末尾的数组结束字符。

以下是修复我的反序列化对象问题的方法

它与默认序列化程序处理单个几何体类型的方式有关

我在ConfigureServices方法中添加了以下代码

services.AddControllers(options => {
                    options.ModelMetadataDetailsProviders.Add(new SuppressChildValidationMetadataProvider(typeof(Point)));
                    options.ModelMetadataDetailsProviders.Add(new SuppressChildValidationMetadataProvider(typeof(Coordinate)));
                    options.ModelMetadataDetailsProviders.Add(new SuppressChildValidationMetadataProvider(typeof(LineString)));
                    options.ModelMetadataDetailsProviders.Add(new SuppressChildValidationMetadataProvider(typeof(MultiLineString)));
                }).AddNewtonsoftJson(options => {
                    foreach (var converter in NetTopologySuite.IO.GeoJsonSerializer.Create(new GeometryFactory(new PrecisionModel(), 4326)).Converters)
                    {
                        options.SerializerSettings.Converters.Add(converter);
                    }
                }).SetCompatibilityVersion(CompatibilityVersion.Version_3_0);
现在,客户端的JSON字符串格式良好,坐标形式正确

"geom": {
            "type": "Point",
            "coordinates": [
                -157.09853,
                21.1574725
            ]
        }

所有这些代码真的相关吗?请把你的代码压缩成一个简单的格式。欢迎来到堆栈溢出@user2864740:如果在JSON数据的开头添加一个
[
,在结尾添加一个
]
,从而使其成为有效的JSON数组,则可以重现OP得到的错误。如果没有它们,您将收到不同的错误消息。我假设这只是写问题时的一个失误,而不是数据问题。整个问题都是基于无效JSON引发的异常。假设包含的数据不相关。嗨,卢克。。。。谢谢你的回复。在阅读了您的回复后,我开始查看数据是如何序列化的!!我没有为GeoJsonSerializer中的单个几何体类型添加转换器!我真的怀疑这是原始问题,因为例外包含“}”。关闭大括号仅在关闭对象时才需要,因此与“查找对象而不是数组”无关,这可能会导致不同的异常。
services.AddControllers(options => {
                    options.ModelMetadataDetailsProviders.Add(new SuppressChildValidationMetadataProvider(typeof(Point)));
                    options.ModelMetadataDetailsProviders.Add(new SuppressChildValidationMetadataProvider(typeof(Coordinate)));
                    options.ModelMetadataDetailsProviders.Add(new SuppressChildValidationMetadataProvider(typeof(LineString)));
                    options.ModelMetadataDetailsProviders.Add(new SuppressChildValidationMetadataProvider(typeof(MultiLineString)));
                }).AddNewtonsoftJson(options => {
                    foreach (var converter in NetTopologySuite.IO.GeoJsonSerializer.Create(new GeometryFactory(new PrecisionModel(), 4326)).Converters)
                    {
                        options.SerializerSettings.Converters.Add(converter);
                    }
                }).SetCompatibilityVersion(CompatibilityVersion.Version_3_0);
"geom": {
            "type": "Point",
            "coordinates": [
                -157.09853,
                21.1574725
            ]
        }