ServiceStack中DTO的值结构

时间:2013-01-18 07:10:07

标签: servicestack ormlite-servicestack

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

我已经被告知JsConfig.TreatValueAsRefTypes值,但这对json有效吗?怎么样的xml,肥皂,mq等... 我只是想使用我没有把它们映射到dto的结构,这对于我的项目需要多年......

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

需要对象引用

1 个答案:

答案 0 :(得分:2)

我只是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));