ポータブルクラスライブラリ(PCL)が正式に非推奨になりました[2017年8月16日]
今日、異なる.NET実装間でコードを共有している場合は、おそらくポータブルクラスライブラリ(PCL)をご存知でしょう。.NET Standard 2.0のリリースに伴い、PCLは正式に非推奨になりました。プロジェクトを.NETStandardに移行する必要があります。
出典: .NETStandard2.0の発表
ポータブルクラスライブラリ(PCL)がすべてのプラットフォームで利用可能になりました[2013年10月14日]
本日のリリース以前は、PCL参照アセンブリにライセンス制限があり、Windowsでのみ使用できることを意味していました。本日のリリースでは、 Microsoft以外のプラットフォームを含むすべてのプラットフォームで使用できるライセンスを備えたPCLリファレンスアセンブリの新しいスタンドアロンリリースを発表します。 これにより、開発者はさらに柔軟性を高め、.NETで素晴らしいことを行うことができます。
出典: ポータブルクラスライブラリ(PCL)がすべてのプラットフォームで利用可能になりました
ダウンロード: Microsoft.NETポータブルライブラリリファレンスアセンブリ4.6RC
参考までに、許可されているアセンブリのセットは次のとおりです。
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(Silverlightから)
私の知る限り、フィールドにDataMember属性をマークし、 DataContract属性を追加する必要があります。
アップデート
はい。
Json.NETポータブルクラスライブラリソリューションがどのように実装されているかを見ることができます。ここからプロジェクトをダウンロードすると、 Source \ Src \ Newtonsoft.Json.Portableで解決策を見つけることができます。Json.NET4.5リリース10(ソース+バイナリ)。
基本的に、彼らはカスタム属性プロバイダーによるアプローチを使用しています
//Serializableを使用しない
#if !(SILVERLIGHT || WINDOWS_PHONE || NETFX_CORE || PORTABLE)
[Serializable]
#endif
//カスタムプロバイダーを使用
#if NETFX_CORE || PORTABLE
using ICustomAttributeProvider = Newtonsoft.Json.Utilities.CustomAttributeProvider;
#endif
そして、プロジェクトがポータブルである場合
#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
[Serializable]の代わりに[DataContract]を使用して能力を失いますか、それとも[Serializable]がサポートするすべてのことを実行できますか?
名前と順序を設定する以外に、オブジェクトのシリアル化方法の制御を除いて、 Serializableがサポートするすべてのことを実行できます。
DataContractSerializerを使用すると、いくつかの利点があります。
[DataMember]
公開されていなくても、装飾されたものはすべてシリアル化する
特に指示しない限り、何もシリアル化できません(「オプトイン」)
[Order=]
の属性を使用して、要素がシリアル化される順序を定義できます。[DataMember]
逆シリアル化のためにパラメーターなしのコンストラクターを必要としません
XmlSerializerよりも10%高速です。
詳細はこちら:XmlSerializerとDataContractSerializer
参考までに:
DataContract
デフォルトモードで次の種類のタイプのシリアル化をサポートします。CLR組み込みタイプ
バイト配列、DateTime、TimeSpan、GUID、Uri、XmlQualifiedName、XmlElement、およびXmlNode配列
列挙型
DataContractまたはCollectionDataContract属性でマークされたタイプ
IXmlSerializableを実装するタイプ
List、Dictionary、Hashtableを含む配列とコレクションクラス
ISerializableを実装するものを含むSerializable属性でマークされたタイプ
上記の属性(POCO)がなく、デフォルトのコンストラクターを持つタイプ