【问题标题】:ServiceStack.Text: Forcing serialization of a property not decorated with DataMember attributeServiceStack.Text:强制序列化未使用 DataMember 属性修饰的属性
【发布时间】:2013-04-12 12:12:31
【问题描述】:

我有以下课程(简化)。

[DataContract]
public class ServiceResponse
{
    public int Sequence { get; set; }

    [DataMember]
    public ServiceResponseStatus Status { get; set; }
}

我正在使用 ServiceStack 序列化对象以进行日志记录,并让 DataContractSerializer 完成其余工作。正如预期的那样,ServiceStack 不会序列化 Sequence,因为它没有用 DataMember 属性修饰。

有没有办法强制 ServiceStack 序列化这个属性?

Marc Gravell 对类似问题DataContract Serialization without DataMember Attribute 的回答似乎提出了不同的方法,但我想我会问。

【问题讨论】:

    标签: c# servicestack datacontractserializer datacontract


    【解决方案1】:

    使用DataContract/DataMember 属性装饰您的类专门用于选择您想要序列化的属性。如果您希望所有属性序列化删除所有属性。

    查看此答案以了解ignore properties in Servicestack serializers 的其他方式。

    【讨论】:

    • 事情是这样的:我希望将所有属性序列化以用于服务中的日志记录,包括Sequence,但我不希望该属性在 API 中泄漏(客户端不需要知道it),这就是为什么它没有用DataMember 属性装饰的原因。是不是清楚一点?
    • 使用其他东西进行日志记录。就像我说的DataMember 属性专门用于选择哪些属性被序列化。即,您要问的是如何扭转他们打算实现的确切行为。使用其他东西 - 我再清楚不过了。
    • 我明白你的意思。我知道我正在尝试做的事情很奇怪,但是之前使用并喜欢过 ServiceStack.Text,我想取消手动序列化。
    • 不需要手动映射,即您可以只使用要记录的字段维护一个类似的类,并使用Auto Mapper like ServiceStack's 自动填充属性,然后您可以序列化这些属性以进行记录.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 2012-07-03
    • 1970-01-01
    • 2013-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多