Trình định dạng kiểu phương tiện OData hiện có thể mở rộng hơn. Mẫu theo.
1) quyết định những gì diễn ra trên tiêu đề, tác giả và các yếu tố được cập nhật cho thức ăn
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);
}
}
Và đăng ký cung cấp dịch vụ tùy chỉnh serializer sử dụng,
config.Formatters.InsertRange(0, ODataMediaTypeFormatters.Create(new CustomSerializerProvider(), new DefaultODataDeserializerProvider()));
2) chỉnh sửa liên kết
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);
}
}
và đăng ký nhà cung cấp trình nối tiếp tùy chỉnh như trên.
Chúng tôi vẫn không hỗ trợ trường hợp 3, tức là loại tên và không gian tên bí danh.
Nguồn
2013-03-14 02:20:15
Chúng tôi đang nghiên cứu thêm các móc mở rộng vào ODataMediaTypeFormatter ngay bây giờ. Bạn sẽ có thể tùy chỉnh siêu dữ liệu nguyên tử sau đó. –
Và liên quan đến các liên kết chỉnh sửa tùy chọn, có một codeplex [mục công việc] (http://aspnetwebstack.codeplex.com/workitem/501) mở cho nó –