【发布时间】:2015-04-15 21:43:54
【问题描述】:
我需要的类被序列化为 Web 服务响应主体。
问题是,来自基类的属性会随之序列化,而我无法为该服务提供这些属性。
我需要阻止这些属性仅在这个子类上序列化。所以我尝试使用new 隐藏属性,但基类属性仍在被序列化(即“Hello, world”在生成的 http 响应正文中):
public class MyBaseClass
{
public string MyProperty { get { return "Hello, world"; } }
}
public class MyChildClass : MyBaseClass
{
[XmlIgnore]
[JsonIgnore]
public new string MyProperty { get; set; }
}
这通过以下方式返回:
return myHttpRequestMessage.CreateResponse(myStatusCode, myChildClassInstance);
两个问题
- 那是怎么回事?为什么不通过装饰来尊重子类?
- 还有其他方法可以实现我想要实现的目标(防止装饰属性被序列化?
我知道这是一团糟,但在我有时间解决更深层次的问题(即强制这种继承的操作)之前,这就是我必须解决的问题。
【问题讨论】:
-
如何初始化子类的实例?
-
[Serializable]你的班级声明? -
您的测试用例是为 Json.Net 重现的,但不是为
DataContractJsonSerializer重现的,它优先序列化子属性而不是父属性。这有帮助吗? -
假设您使用的是 Json.NET,这可能是相关的:stackoverflow.com/questions/27887787/…
-
我正在使用默认的序列化程序,我认为它使用 json.net 用于 json 和 datacontractserializer 用于 xml。两者都需要支持。我先测试json,我没有专门尝试过xml。 @dbc 这就是你在说的吗?那如果是xml就好了? @robert 只是
var childInstance = new ChildClass()。没什么特别的。
标签: c# serialization asp.net-web-api json.net datacontractserializer