1

返回以下对象会从 JSON 中排除属性“坐标”。我究竟做错了什么?

[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 对象。

提前致谢!

4

1 回答 1

2

您只序列化Geometry对象的属性,即使实际对象是MultiPolygon. 正如神话所解释的,

由于 JSON 规范中没有“类型信息”的概念,为了让继承在 JSON 序列化器中工作,他们需要向 JSON 线格式发出专有扩展以包含此类型信息 - 现在将您的 JSON 有效负载耦合到特定的 JSON序列化器实现。

要在 Servicestack.text 中启用对多态Geometry对象的支持,请添加特定于类型的配置设置以将“类型信息”添加到输出中。IE:

JsConfig<Geometry>.ExcludeTypeInfo = false;

(可能还需要添加一个接口。参见多态列表序列化的测试。多态实例序列化的测试。例如)

如果您不愿意在 json 中公开类型信息,则可以使用自定义序列化程序作为替代解决方案。

于 2013-12-04T17:46:18.003 回答