0

在 Web API Controller 中,操作方法返回 C# 类,如下所示:

public class ShipController : ApiController
{
    [HttpGet]
    public Cell GetShip()
    {
        return new Cell(new ScriptEngine());
    }
}

Cell 是我的类,继承自 Jurassic JS 库的 ObjectInstance。当我调用此操作时,ASP.NET 尝试将我的对象序列化为 XML 或 JSON,我得到System.InvalidOperationException:“'ObjectContent`1' 类型无法序列化内容类型'application/xml; charset=utf-8 ’。” 我还尝试将 [DataContract] 属性添加到类中,正如我在此处找到的那样,如下所示:

[DataContract]
public class Cell : ObjectInstance
{
    [DataMember]
    public int cellId;

    public Cell(ScriptEngine  engine) : base(engine)
    {
    }
}

但我仍然得到错误。如何使操作只返回我的序列化类字段,而不是进入父类?

4

1 回答 1

1

您只想序列化Cell该类,而不是其父类,对吗?解决方案是:创建一个自定义 JSON 转换器。这是代码:

细胞.cs

[JsonConverter(typeof(CellJsonConverter))]
public class Cell : Parent
{
    public int CellId { get; set; }
    public string Name { get; set; }

    public Cell(int id) : base(id)
    {
        CellId = id;
        Name = "This is a name";
    }
}

CellJsonConverter.cs

public class CellJsonConverter : JsonConverter
{
    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        var cell = (Cell) value;

        writer.WriteStartObject();

        writer.WritePropertyName("cellId");
        serializer.Serialize(writer, cell.CellId);

        writer.WritePropertyName("name");
        serializer.Serialize(writer, cell.Name);

        writer.WriteEndObject();
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }

    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(Cell);
    }
}

当你调用你的 API 时,你会得到:{"cellId":10,"name":"This is a name"}.

JsonConverter是从Newtonsoft.Json

随意询问您是否有不清楚的地方:)

于 2015-10-20T17:18:26.830 回答