返回以下对象会从JSON中排除属性“coordinates”。 我做错了什么?
[Route("/GeozonePolygon/{ZoneType}")]
public class RequestGeozonePolygon{
public int ZoneType { get; set; }
}
public class ResponseGeozonePolygon{
public FeatureCollection Result { get; set; }
public ResponseStatus ResponseStatus { get; set; }
}
public class GeozonePolygon : Service {
public ResponseGeozonePolygon Any(RequestGeozonePolygon request){
return new ResponseGeozonePolygon() { Result = (new DAL.GeoZone()).GetZoneGeoJsonByType(request.ZoneType) };
}
}
这些是涉及的类型:
public class Geometry {
public string type {
get { return GetType().Name; }
}
}
public class Feature {
public string type {
get { return GetType().Name; }
}
public Geometry geometry { get; set; }
public object properties { get; set; }
}
public class FeatureCollection {
public string type {
get { return GetType().Name; }
}
public Feature[] features { get; set; }
}
public class MultiPolygon : Geometry {
public double[][][][] coordinates { get; set; }
}
FeatureCollection属性几何包含MultiPolygon对象。
提前致谢!
答案 0 :(得分:2)
您只序列化Geometry
对象的属性,即使实际对象是MultiPolygon
。 As explained by Mythz,
由于JSON规范中没有'type info'的概念,为了继承在JSON Serializers中工作,他们需要发出JSON线格式的专有扩展以包含此类型信息 - 现在将您的JSON有效负载耦合到特定的JSON序列化器实现。
要在Servicestack.text中启用对多态Geometry
对象的支持,请添加特定于类型的配置设置以将“类型信息”添加到输出。即:
JsConfig<Geometry>.ExcludeTypeInfo = false;
(可能还需要添加界面。有关示例,请参阅tests for Polymorphic List serialization.和tests for Polymorphic Instance serialization.)
如果您不愿在json中公开类型信息,可以使用custom serializers作为替代解决方案。