你如何得到ServiceStack.ToJson *有时*忽略属性?

时间:2016-05-25 09:35:20

标签: servicestack

我有一个ServiceStack DTO:

[Route("/images", "POST")]
public class PostImageCommand
{
    public string Notes { get; set; }
    public byte[] Image { get; set; }
    //other properties removed for brevity
}

我的代码中也有一部分使用log4net记录消息。我通过序列化命令来做到这一点。例如,我只是这样做:

var command = new PostImageCommand(){
    //set properties
};

var commandJson = command.ToJson();
MyLogClass.Log(commandJson);

问题:Image字节数组可能变得非常大。我不希望在记录时序列化此属性,否则我的日志将填充大量图像数据。

我尝试将[IgnoreDataMember]属性放在DTO中的Image byte []上。但是,如果没有Visual Studio说明原因,这会导致构建失败。我可以将属性放在Image属性上,但是当我尝试构建时,我会看到:

enter image description here

没有理由为什么构建失败,只是这些消息。 “输出”选项卡仅显示“操作已取消”。

我的问题:在我的情况下,忽略DTO属性被序列化的最简单方法是什么?

1 个答案:

答案 0 :(得分:3)

此前一个答案列出了different ways to ignore properties in ServiceStack.Text。但实际上,如果您只是想忽略该属性的记录,您可以将该属性设置为null然后将其恢复,将其映射到另一个模型,只使用您想要使用built-in AutoMapping tools序列化的类型,使用ToObjectDictionary()扩展方法将模型序列化为字典,然后删除不想记录的项目。

您使用[IgnoreDataMember]属性时遇到的问题是因为您没有引用 System.Runtime.Serialization .NET Framework程序集。