servicestack - ServiceStack 中 DTO 中的值结构

标签 servicestack ormlite-servicestack

我有一种方法可以在 DTO 中正确序列化结构,或者更好的是让框架以某种方式将结构视为 dto。

我已获悉 JsConfig.TreatValueAsRefTypes 值,但这仅适用于 json,对吗? xml、soap、mq 等怎么样? 我只是想使用我拥有的结构,而不必将它们映射到 dto,这对于我的项目来说需要数年时间......

另一方面,我也无法弄清楚我对 JsConfig.TreatValueAsRefTypes 做错了什么,编译器似乎认为它是在静态上下文中调用的: 非静态字段、方法需要对象引用...

最佳答案

我刚刚 committed a change (在下一版本中提供)使得 JsConfig<T>.TreatValueAsRefType作为静态,因此您现在可以将结构类型序列化为引用类型,例如:

public struct UserStruct
{
    public int Id { get; set; }
    public string Name { get; set; }
}

JsConfig<UserStruct>.TreatValueAsRefType = true;

var dto = new UserStruct { Id = 1, Name = "foo" };

dto.ToJson().Print(); //= {"Id":1,"Name":"foo"}

dto.ToJsv().Print();  //= {Id:1,Name:foo}

dto.ToXml().Print(); 

ServiceStack 使用 .NET 的 XML DataContractSerializer(也在 SOAP 中使用),它已经按预期序列化了结构:

<?xml version="1.0" encoding="utf-8"?>
<UserStruct xmlns:i="http://www.w3.org/2001/XMLSchema-instance" 
  xmlns="http://schemas.datacontract.org/2004/07/ServiceStack.Text.Tests">
    <Id>1</Id>
    <Name>foo</Name>
</UserStruct>

您还可以使用静态 API 通过非泛型 API 来注册结构类型:

JsConfig.TreatValueAsRefTypes.Add(typeof(UserStruct));

关于servicestack - ServiceStack 中 DTO 中的值结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14394047/

相关文章:

servicestack - 有没有更优雅的方式在 ServiceStack 中构建 URI?

servicestack - OrmLite/服务堆栈 : how to specify which table you want a column from when each table joined has the same column name?

c# - 如何在 ServiceStack.OrmLite 中自定义复杂类型的序列化/反序列化

c# - 如何使用 OrmLite 固定大小而不是 null varchar?

sql-server - DateTime.SpecifyKind(DateTimeKind.Utc) 是否有 OrmLite 选项?

c# - 如何使用 servicestack 类型的客户端?

memory-leaks - ServiceStack Funq Container WeakReference 泛滥

redis - 如何最好地使用 ServiceStack 管理 Redis 连接?

c# - ServiceStack.Text 没有按预期序列化我的对象

c# - OrmLite for ServiceStack 3 不支持可空枚举属性?