- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个现有的 WCF REST/JSON 服务,它返回不同类型数据的列表。我想向每个响应添加一个代表修订号的属性。
假设我有一个“汽车”类
[DataContract]
public class Car {
[DataMember]
public String make;
[DataMember]
public String year;
}
当前/cars/返回一个 Cars 数组,如下所示
{ [ {year: "1990", make: "bmw"}, {year: "2010", make: "ferrari"} ] }
现在,我希望响应是
{ revision:"1234", cars:[ {year: "1990", make: "bmw"}, {year: "2010", make: "ferrari"} ]}
如果我只有一个汽车类,这是微不足道的,但我的服务有数百个简单实体,我希望每个实体都返回修订属性和实体列表。我想我可以像下面这样创建一个通用类来包装现有项目。
[DataContract]
public class VersionedItem<T> {
String revision;
T item;
[DataMember]
public String revision {
get{}
set{}
}
[DataMember]
public T item {
get{}
set{}
}
}
这几乎可以很好地工作,除非我需要返回以下内容:
{ revision:"1234", cars:[ {year: "1990", make: "bmw"}, {year: "2010", make: "ferrari"} ] }
这实际上是返回
{ revision:"1234", item:[ {year: "1990", make: "bmw"}, {year: "2010", make: "ferrari"} ] }
问题 1:有什么方法可以专门化泛型类的实例以指定项目属性的正确名称(在本例中为汽车)? IE,(完全是废话,但为了帮助理解这一点)
public class VersionedCar : VersionedItem<Car>
{
[DataMember(Name="cars")]
public Car item{
get{}
set{}
}
}
问题 2:如果不是,实现包装所有响应并在所有响应中包含新属性的最佳方法是什么?
最佳答案
您可以插入一个“操作格式化程序”。例如,使用 Reflector,看看 WebHttpBehavior 如何插入并使用 DataContractJsonSerializerOperationFormatter。
为此,您首先需要插入您自己的服务端点行为(类似于 WebHttpBehavior。)当行为被要求用于操作格式化程序时,您返回它您自己的自定义格式化程序(类似于 DataContractJsonSerializerOperationFormatter。_所有这些自定义formatter 所做的是在委托(delegate)给通常的序列化机制之前,围绕它通常序列化的数据序列化一个版本包装器。
您还需要类似的客户端行为和相同的格式化程序,回到客户端,以便可以在 WCF 客户端上处理此类消息。
希望这对您有所帮助!
关于json - WCF - 泛型类的 DataMember 的自定义名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9540859/
我有一个 WCF 服务,想忽略序列化中的某些部分。我怎么做?我使用 IgnoreDatamember() 进行了测试,但它不起作用。 [DataContract(Name = "M")] public
我有一个 WCF 服务,想忽略序列化中的某些部分。我怎么做?我使用 IgnoreDatamember() 进行了测试,但它不起作用。 [DataContract(Name = "M")] public
我们有一个遗留系统,需要以最非结构化的格式馈送(XML)数据。 .NET DataContractSerializer甚至可能进行以下操作? 鉴于以下DataContracts [Collection
我应该以何种方式使用 DataMemeber 属性? 我. [DataMember] internal protected string _FirstName=""; [DataMember] p
我有一个可以接受一个字符串的 .Net Web 服务函数。 然后该函数会将该字符串序列化为 JSON,但我只想在它的值不是“”时序列化它。 我找到了这些说明: http://msdn.microsof
我有一个现有的 WCF REST/JSON 服务,它返回不同类型数据的列表。我想向每个响应添加一个代表修订号的属性。 假设我有一个“汽车”类 [DataContract] public class C
我最近一直在使用一些可序列化的类,它们通常看起来像这样: [DataContract] public class Foo { [DataMember(Order = 0)] publi
我们必须实现一个提供的外部 API。 此 API 无法更改。 对于这个 API,交换 SOAP 消息,其中之一处理错误异常是这样的: 0 虽然我们可以使用其他框架(例如 asmx)来实现这
我有一个带有 DataMember 属性的基类。我还有一个派生类,其中包含 DataMember 属性。在我的 WCF 项目中,我正在返回派生类。有没有办法阻止我的基类中的成员序列化?这是一些示例代码
我有一个可用的 WCF 服务,它使用 JSON 作为它的 RequestFormat 和 ResponseFormat。 [ServiceContract] public interface
在 WCF 中,您可以使用 [DataContract] 定义契约(Contract)。和 [DataMember]属性,像这样: [DataContract] public class Sample
在wcf中,在属性上应用DataMember特性有什么区别 private int m_SomeValue; [DataMember] public int SomeValue { get {.
我有一个服务器端类,我通过 [DataContract] 在客户端上提供该类。这个类有一个只读字段,我想通过属性提供该字段。但是,我无法这样做,因为似乎不允许我在没有 get 和 set 的情况下添加
我有以下内容: [DataContract] public class Foo { [DataMember(EmitDefaultValue = true) public bool B
请参阅下面的代码: Test(); function Test() { alert("got here
当使用 DataContract 序列化程序时,它无法反序列化 Id 值,如下例所示: using System; using System.Runtime.Serialization; using
我将 WCF 服务公开给多个客户端。在某些客户端数据成员名称中,大小写不正确。根据套管标准,我的类属性具有无效的属性名称,例如 public class TransactionParamter {
我的 DataContract 类中有以下两个公共(public)属性。 我想在客户端使用它。但是我不想通过服务返回这个。 MyDateString 不需要 DataMember 属性吗? [
我在 WCF 服务中有以下代码: [DataContract] [KnownType(typeof(Bitmap))] [KnownType(typeof(Image))] public class
以下数据契约(Contract): [DataContract(Namespace = "http://namespace", Name = "Blarg")] public clas
我是一名优秀的程序员,十分优秀!