我有一个使用WCF数据服务OData服务的客户端应用程序(都是v5.3.0)。我希望客户端应用程序使用JSON与服务进行通信,而不是默认的Atom Pub XML。
如果没有提供IEdmModel实例,这是否可行?使用Atom格式时可以这样做:
var ctx = new DataServiceContext(_oDataSvcUri, DataServiceProtocolVersion.V3)
{
IgnoreMissingProperties = true
};
// this isn't explicitly needed, as it uses Atom by default
ctx.Format.UseAtom();
return ctx;
为了使用JSON,这是一个需要的例子:
var ctx = new DataServiceContext(_oDataSvcUri, DataServiceProtocolVersion.V3)
{
IgnoreMissingProperties = true
};
const string svcMetadata = "*insert contents of http://example.com/YourData.svc/$metadata here*";
var xmlReader = XmlReader.Create(new StringReader(svcMetadata));
IEdmModel edmModel = EdmxReader.Parse(xmlReader);
ctx.Format.UseJson(edmModel);
ctx.ResolveName = type => type.FullName;
ctx.ResolveType = typeName => Type.GetType(typeName + ", " + "MyDomainModelAssemblyName");
return ctx;
我希望能够使用JSON格式而无需像Atom一样指定IEdmModel。这可能吗?
答案 0 :(得分:0)
如果没有服务器模型客户端,则无法使用WCF数据服务客户端读取JSON Light负载。 JSON Light有效载荷很干净,很小,因为它们假设客户端了解服务器模型,并且可以使用它来计算遗漏的所有额外元数据。
但是,您不必使用EdmxReader自行解析服务器的$ metadata文档。如果使用Visual Studio中的“添加服务引用”生成客户端类,并且使用派生的DataServiceContext类(而不是直接使用DataServiceContext),则生成的派生类已经设置了一些配置,以便您可以调用ctx.Format.UseJson()
需要明确提供模型。