2017-05-11 6 views
0

WCF DataContractSerializeを使用してシリアル化するプロジェクトがあります。私は、ベースラインとしてシリアル化結果を取る必要があるので、私はハードコード部Serialization.Tests, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9d77cc7ad89668ebをしたくない クラスのフィールドpublic IList<Simple> List2;をシリアル化するとき、それは常に複雑なAssemblyQualifiedNameを生成しないでIList <T>フィールドをシリアル化する方法?

<a:List2 z:Id="536" i:type="b:System.Collections.Generic.List`1[[SerializationTypes.Simple, Serialization.Tests, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9d77cc7ad89668eb]]" z:Size="2" > 
    <c:Simple z:Ref="525" i:nil="true"/> 
    <c:Simple z:Ref="534" i:nil="true"/> 
</a:List2> 

に生成するには、その結果に存在します。これはフィールドにgenericTypeのアセンブリ修飾名であるためです。だから私はそれを変更する方法を見つけることができません。

解決方法を見つけることができますか?

[DataContract(IsReference = true)] 
public class Collection2 
{ 
    [DataMember] 
    public IList<Simple> List2; 
} 
[DataContract(IsReference = true)] 
public class Simple 
{ 
    [DataMember] 
    public string Data; 
    public Simple() { } 
} 

答えて

0

あなたはCollectionDataContractを使用して、リストの周りにラッパークラスを記述することができます。

[CollectionDataContract] 
public class SimpleList: List<Simple> { 
    public SimpleList() { } 
    public SimpleList(IEnumerable<Simple> simple) : base(simple) { } 
} 

その後、代わりにこのクラスを使用するCollection2を変更しますので、多くの

[DataMember] 
public SimpleList List2; 
+0

感謝を。私はこの方法を試みました。このアイデアは私にとって非常に役に立ちます。私はIEnumerable 、ICollection 、IDictionary 、IList フィールドでそれを行います。 – BOBO

関連する問題