【问题标题】:How do you get ServiceStack.ToJson to *sometimes* ignore properties?你如何让 ServiceStack.ToJson *有时*忽略属性?
【发布时间】:2016-05-25 18:51:51
【问题描述】:

我有一个 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);

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

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

没有构建失败的原因,只是这些消息。输出选项卡仅显示“操作已取消”。

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

【问题讨论】:

    标签: servicestack


    【解决方案1】:

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

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

    【讨论】:

    • 男主本人的回答,谢谢!这帮助了我。
    • @ohyeah np :) 很高兴它有帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    相关资源
    最近更新 更多