cel*_*lik 8 odata asp.net-web-api
我正在使用新的ASP.NET webapi odata(版本4.0.0,根据Nuget上次发布于2013年2月27日)
基本上我按照这里描述的那样做:http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api
我正在发布我的数据传输对象并创建了odata atom pub feed但我想对它有更多的控制权.主要是我希望能够做到以下几点:
<category term="X"和m:type子特性是在我的应用程序类.目前,他们使用完整的命名空间公开c#类名,但我不想公开它.谢谢.
Rag*_*nti 11
OData媒体类型格式化器现在更具扩展性.样品如下.
1)确定Feed的标题,作者和更新元素的内容
public class AtomMetadataFeedSerializer : ODataFeedSerializer
{
public AtomMetadataFeedSerializer(IEdmCollectionTypeReference edmType, ODataSerializerProvider serializerProvider)
: base(edmType, serializerProvider)
{
}
public override ODataFeed CreateODataFeed(IEnumerable feedInstance, ODataSerializerContext writeContext)
{
ODataFeed feed = base.CreateODataFeed(feedInstance, writeContext);
feed.Atom().Title = new AtomTextConstruct { Kind = AtomTextConstructKind.Text, Text = "My Awesome Feed" };
return feed;
}
}
public class CustomSerializerProvider : DefaultODataSerializerProvider
{
public override ODataEntrySerializer CreateEdmTypeSerializer(IEdmTypeReference edmType)
{
if (edmType.IsCollection() && edmType.AsCollection().ElementType().IsEntity())
{
// feed serializer
return new AtomMetadataFeedSerializer(edmType.AsCollection(), this);
}
return base.CreateEdmTypeSerializer(edmType);
}
}
Run Code Online (Sandbox Code Playgroud)
并使用注册自定义序列化程序提供程序,
config.Formatters.InsertRange(0, ODataMediaTypeFormatters.Create(new CustomSerializerProvider(), new DefaultODataDeserializerProvider()));
Run Code Online (Sandbox Code Playgroud)
2)自定义编辑链接
public class CustomEntityTypeSerializer : ODataEntityTypeSerializer
{
public CustomEntityTypeSerializer(IEdmEntityTypeReference edmType, ODataSerializerProvider serializerProvider)
: base(edmType, serializerProvider)
{
}
public override ODataEntry CreateEntry(EntityInstanceContext entityInstanceContext, ODataSerializerContext writeContext)
{
ODataEntry entry = base.CreateEntry(entityInstanceContext, writeContext);
if (notProduceEditLinks)
{
entry.EditLink = null;
}
return entry;
}
}
public class CustomSerializerProvider : DefaultODataSerializerProvider
{
public override ODataEntrySerializer CreateEdmTypeSerializer(IEdmTypeReference edmType)
{
if (edmType.IsEntity())
{
// entity type serializer
return new CustomEntityTypeSerializer(edmType.AsEntity(), this);
}
return base.CreateEdmTypeSerializer(edmType);
}
}
Run Code Online (Sandbox Code Playgroud)
并如上所述注册自定义序列化程序提供程序.
我们仍然不支持方案3,即别名类型名称和命名空间.
| 归档时间: |
|
| 查看次数: |
7266 次 |
| 最近记录: |