- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在将 .NET Framework C# 类库移植到可移植类库。一个反复出现的问题是如何处理用 [Serializable]
属性修饰的类,因为该属性不是可移植类库子集的一部分。可移植类库子集中的序列化功能似乎包含在 DataContractAttribute 中.
[Serializable]
替换为 [DataContract]
属性是否足够(暗示所有需要序列化的字段和属性也需要用 [DataMember]
装饰)? [Serializable]
? 鉴于使用了 [DataContract]
和 [DataMember]
,我正在考虑按照以下几行更改代码。这种方法有什么明显的缺陷吗?有什么方法可以更简洁地表述同样的事情吗?
#if PORTABLE
[DataContract]
#else
[Serializable]
#endif
public class SerializableClass : SerializableBaseClass
{
...
#if !PORTABLE
protected SerializableClass(SerializationInfo info, StreamingContext context)
: base(info, context)
{
}
#endif
...
#if PORTABLE
[DataMember]
#endif
private Type1 _serializableField;
#if PORTABLE
[DataMember]
#endif
private Type2 SerializableProperty { get; set; }
...
}
最佳答案
可移植类库 (PCL) 现已正式弃用 [2017 年 8 月 16 日]
If you’re sharing code between different .NET implementations today, you’re probably aware of Portable Class Libraries (PCLs). With the release of .NET Standard 2.0, we’re now officially deprecating PCLs and you should move your projects to .NET Standard.
来源: Announcing .NET Standard 2.0
可移植类库 (PCL) 现在可在所有平台上使用 [2013 年 10 月 14 日]
Prior to today’s release, there was a license restriction with the PCL reference assemblies which meant they could only be used on Windows. With today’s release we are announcing a new standalone release of the PCL reference assemblies with a license that allows it to be used on any platform – including non-Microsoft ones. This enables developers even more flexibility and to do great things with .NET.
来源: Portable Class Library (PCL) now available on all platforms
下载: Microsoft .NET Portable Library Reference Assemblies 4.6 RC
仅供引用,允许的程序集集是:
mscorlib.dll
System.dll
System.Core.dll
System.Xml.dll
System.ComponentModel.Composition.dll (MEF)
System.Net.dll
System.Runtime.Serialization.dll
System.ServiceModel.dll
System.Xml.Serialization.dll
System.Windows.dll (from Silverlight)
据我所知,您需要使用 DataMember 属性标记字段,并添加 DataContract 属性。
更新
是的。
你可以看看如何Json.NET实现了可移植类库解决方案。当您从这里下载项目时,您可以在 Source\Src\Newtonsoft.Json.Portable 中找到解决方案 Json.NET 4.5 Release 10 (source + binary) .
基本上他们使用自定义属性提供程序的方法
//不要使用Serializable
#if !(SILVERLIGHT || WINDOWS_PHONE || NETFX_CORE || PORTABLE)
[Serializable]
#endif
//使用自定义提供者
#if NETFX_CORE || PORTABLE
using ICustomAttributeProvider = Newtonsoft.Json.Utilities.CustomAttributeProvider;
#endif
如果项目是PORTABLE
#if !PocketPC && !NET20
DataContractAttribute dataContractAttribute = GetDataContractAttribute(objectType);
if (dataContractAttribute != null)
return MemberSerialization.OptIn;
#endif
OptIn 描述是:
/// <summary>
/// Only members must be marked with <see cref="JsonPropertyAttribute"/> or <see cref="DataMemberAttribute"/> are serialized.
/// This member serialization mode can also be set by marking the class with <see cref="DataContractAttribute"/>.
/// </summary>
OptIn,
希望对您有所帮助。
更新 2
Am I losing any abilities using [DataContract] instead of [Serializable], or will I still be able to do everything that [Serializable] supports?
您可以执行 Serializable 支持的所有操作,除了在设置名称和顺序之外控制对象的序列化方式。
使用 DataContractSerializer有几个好处:
序列化任何用 [DataMember]
装饰的东西,即使它不是公开可见的
不能序列化任何东西,除非你特别告诉它 ("opt-in")
您可以使用 [DataMember]
上的 [Order=]
属性定义元素序列化的顺序
反序列化不需要无参数构造函数
比 XmlSerializer 快 10%。
在这里阅读更多:XmlSerializer vs DataContractSerializer
另供引用:
DataContract
默认支持以下几种类型的序列化:CLR 内置类型
Byte array, DateTime, TimeSpan, GUID, Uri, XmlQualifiedName, XmlElement and XmlNode array
Enums
Types marked with DataContract or CollectionDataContract attribute
Types that implement IXmlSerializable
Arrays and Collection classes including List, Dictionary and Hashtable
Types marked with Serializable attribute including those that implement ISerializable
Types with none of the above attributes (POCO) but with a default constructor
关于c# - 可移植类库 : recommended replacement for [Serializable],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12903262/
最近一篇关于 HTML5 的文章说,Proposed Recommendation 日期是 2022 年,Candidate Recommendation 日期是 2012 年。 我想知道“Propo
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是无关紧要的,因
我知道缩写SVM(Support Vector Machines)和 SVD(Singular Value Decomposition)并且 SVM 和 SVD 都用于推荐引擎。 用外行的话来说,这两
我想尝试构建一个推荐系统,我的意思是一种算法,可以查看用户发布的偏好和/或评论,然后为他们提出建议,类似于 netflix 或亚马逊使用的算法。 什么是学习如何编写这样的东西的好资源?我应该从哪里开始
这是一个理论问题。假设我已经实现了两种类型的协同过滤:基于用户的 CF 和基于项目的 CF(以 Slope One 的形式)。 我有一个很好的数据集供这些算法运行。但是我想做两件事: 我想向数据集添加
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭去年。 Improve th
我正在阅读 CF 中的一些论文,并注意到大多数最先进的方法仅基于评级矩阵上的不同分解方法。我想知道是否有一些将内容信息(例如用户特征和项目特征)组合成因式分解的代表性作品。有什么想法吗? 最佳答案 我
例如:我有一个像这样的主文件 userid itemid rating 1
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 7年前关闭。 Improve t
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 6年前关闭。 Improve this questi
我正在构建一个基于内容的电影推荐系统。很简单,只要让用户输入电影名称,系统就会找到特征最相似的电影。 在计算相似度并按降序排列得分后,我找到5个相似度得分最高的相应电影并返回给用户。 到目前为止,当我
我有这个问题:为 facebook 正确配置的页面: (我也尝试过:) (还有其他一些) 在head中,对应的OG代码:app_id、url、type、title、image、de
最近发现好几个网站都有“Recommended for You”之类的东西,比如youtube,或者facebook,可以研究我的使用行为,推荐一些内容给我... ...我会想知道他们如何分析这些信息
我在https://reactrouter.com/en/main/hooks/use-navigate中看到“在加载器和操作中使用重定向通常比在这个钩子中使用重定向更好”,所以我应该将useNavi
嘿,对于任何做过这件事的人来说,这只是一个简单的问题。我想创建一个视频管网站。我以前做过文件上传,但想知道是否有人可以就我打算做什么给我建议。 我计划的方式就是在我的网页目录下有一个文件夹,病毒扫描和
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 5年前关闭。 Improve this qu
在构建网站时,例如问答网站或社区论坛网站,仅了解 HTML、CSS、PHP、MySQL 和 javascript 是否足以使网站动态化? 我之所以这样说,是因为我和我的老师交谈时,他说主要网站使用多种
据我所知,Embedly刚刚开始将“推荐”视频的版本提升到YouTube在其“Cards”产品上嵌入的底部。有什么办法可以删除它们? Embedly Recommended Videos 我们将Emb
我想使用 prediction.io 构建推荐服务。我认为 Universal Recommender ( http://templates.prediction.io/PredictionIO/te
我是一名优秀的程序员,十分优秀!