.net – DataContract Serializer数组节点名称’d3p1′
有人能告诉我“d3p1”节点名称在这里意味着什么吗?
<ActionMessage> <Data xmlns:d3p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> <d3p1:anyType i:type="Agreement"> </d3p1:anyType> <d3p1:anyType i:type="Agreement"> shortened 我收到了许多“看起来很难看”和“如果d3p1发生了什么改变”??这个对我的asp webapi项目中的默认序列化的评论.我说它的机器可读性很好.但我很好奇为什么它看起来像这样. 以下是详细信息,我在控制器上有一个GET动词,它返回一个可枚举的ActionMessage public IEnumerable<ActionMessage> Get(Guid) ActionMessage不能是通用的(如果这甚至会有帮助),因为列表将包含不同泛型类型的操作消息. “newagreement”,“keychange”等 它看起来像ActionMessage< NewAgreement>或ActionMessage< KeyChange>还有很多. get中没有办法做到这一点,因为get返回了很多“类型”的动作消息.基类或接口之外. I.E. ActionMessage的<即时聊天>但这些消息没有任何共同之处. 这是现在的动作消息. public class ActionMessage { [DataMember] public Status Status { get; set; } [DataMember] [XmlElement(ElementName = "Agreement")] [XmlArrayItem(ElementName = "testnode")] public List<object> Data { get; set; } [DataMember] public MessageTypes Type { get; set; } [DataMember] public Guid Id { get; set; } } 请注意,“麻烦的”XML来自data属性. 思考? XML人类可读性是否重要?我应该经历从datacontract序列化器切换到xml序列化器的痛苦吗?这可能会启用元素名称属性,但我更喜欢把它全部留下来,虽然我可以完全控制生成的XML,但我真的需要,还是我真的在乎? 解决方法
在努力解决这一问题之后,我得出的结论是,通常最好尽可能明确地使用数据合同.在这种情况下,我会拆分List< object>将数据分成多个显式列表,即List< Agreement>协议;列表与LT; KeyChange> KeyChanges;等等.生成的XML可能如下所示:
<ActionMessage> <Status>...</Status> <Agreements> <Agreement>...</Agreement> </Agreements> <KeyChanges/> ... </ActionMessage> 一些元素将为空(您可以配置序列化程序以省略这些元素),但每个元素都是显式的,易于阅读,解析和反序列化.更重要的是,架构的消费者确切地知道会发生什么. 还有另一种选择,那就是定义协议,KeyChange等都可以实现的某种接口(例如’IData’)并更改List< object>列表的数据< IData>数据.它会产生稍微漂亮的XML文档,但您必须维护已知类型的列表,以确保可以反序列化所有实现. XML看起来像这样: <ActionMessage> <Status>...</Status> <Data> <IData xsi:type="Agreement">..</IData> <IData xsi:type="KeyChange">..</IData> </Data> <KeyChanges/> ... </ActionMessage> 但是,这会导致脆弱的反序列化,并且可能导致消息的向前/向后兼容性问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 如何让ASP.NET Web API的Action方法在希望的Culture下执行
- asp.net-mvc-2 – ASP.NET-MVC2预览1:有任何重大变化吗?
- 我应该把我的日志文件放在哪里用于asp.net应用程序?
- asp.net-mvc – 保持viewdata在RedirectToAction
- asp.net – .NET 4.0实现OutputCacheProvider
- asp.net-mvc – 使用ASP.NET MVC的SEO URL
- ASP.NET MVC与Facebook Connect模板项目
- asp.net – 是否有复杂的aspnet UI验证的设计模式?
- asp.net core视图中使用Json序列化模型
- ASP.NET MVC> ASP.NET WebForms,为什么?