使用ServiceStack将多维数组序列化为JSON

时间:2013-11-30 02:56:54

标签: json serialization multidimensional-array servicestack servicestack-text

返回以下对象会从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对象。

提前致谢!

1 个答案:

答案 0 :(得分:2)

您只序列化Geometry对象的属性,即使实际对象是MultiPolygonAs 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作为替代解决方案。