2

DTOで構造体を適切にシリアル化する方法がありますが、フレームワークで構造体をdtoとして処理する方法があります。

JsConfig.TreatValueAsRefTypes値について通知されましたが、それはjsonで機能しますか?xml、soap、mq ectについてはどうですか...私は単に構造体を使用したいので、それらをdtoにマップする必要はありません。これは私のプロジェクトでは何年もかかります...

一方で、JsConfig.TreatValueAsRefTypesで何が間違っているのかを理解することもできません。コンパイラは、静的コンテキストで呼び出されていると考えているようです。非静的フィールドのメソッドにはオブジェクト参照が必要です。

4

1 に答える 1

2

静的にする変更(次のリリースで利用可能)をコミットしたので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));
于 2013-01-18T11:23:32.700 に答える