2012-02-01 8 views
3

ODataにシリアライズされるWCFサービスへの呼び出しによって、任意のオブジェクト/リスト/ディクショナリが私に返されます。私は現在、WCFデータサービス2011年10月のCTPを使用してこれを達成しています。反射を使用してODataEntry/ODataFeedなどを生成していますが、既に実装されているものがあれば、ホイールを再作成するのではなくむしろ使用したいと考えています。シリアルカスタムオブジェクトへのODataSerializerはありますか?

どんなヘルプ/情報も大歓迎です。例えば

Person p = new Person() 
{ 
PersonID = 1, 
FirstName = "Bob", 
LastName = "Smith", 
Address = new Address() 
    { 
      AddressID = 1, 
      Address1 = "1 Main St", 
      Address2 = "Suite 200", 
      City = "Columbus", 
      State = "OH", 
      ZipCode = "43215" 
    } 
}; 

は、ODataの形式はJSONあるので、私はServiceStack.Textを使用することをお勧めし

{ 
    "d":{ 
    "__metadata":{ 
     "id":"Person(1)","uri":"http://serviceroot/Person(1)","type":"MyProject.Person" 
    }, 
"PersonID":1, 
"FirstName":"Bob", 
"LastName":"Smith", 
"Address":{ 
       "AddressID":1, 
       "Address1":"1 Main St", 
       "Address2":"Suite 200", 
       "City":"Columbus", 
       "State":"OH", 
       "ZipCode":"43215" 
      } 
     } 
} 
+0

あなたは[WEBAPI-ODATAを考えがあります](http://www.nuget.org/packages/Microsoft.AspNet.WebApi.OData)? –

答えて

1

に変換します。このような目的のために正確に書かれた高速の.NETシリアライザです。それはServiceStack Webサービスフレームワークの一部であり、使い方はとても簡単です。

1)プロジェクトにインポートおよび参照ServiceStackフレームワーク(どちらかGitHubからNuGet経由または直接)

2)あなたがすでにそうであるように、複雑なオブジェクトを作成し、塗りつぶし:

Person p = new Person() 
{ 
    PersonId = 1, 
    FirstName = "Bob", 
    LastName = "Smith", 
    Address = new Address() 
    { 
     AddressId = 1, 
     Address1 = "1 Main St", 
     Address2 = "Suite 200", 
     City = "Columbus", 
     State = "OH", 
     ZipCode = "43215" 
    } 
}; 

3)コール複雑なオブジェクトからToJson拡張方法:

p.ToJson(); 

4)出来上がり - 出力(必要に応じて):

{ 
    "PersonId": 1, 
    "FirstName": "Bob", 
    "LastName": "Smith", 
    "Address": 
    { 
    "AddressId": 1, 
    "Address1": "1 Main St", 
    "Address2": "Suite 200", 
    "City": "Columbus", 
    "State": "OH", 
    "ZipCode": "43215" 
    } 
} 

ヒント:デバッグ目的で出力を印刷するためには、PrintDump()を使用します。

p.ToJson().PrintDump(); 
関連する問題