1

私はこのオブジェクト構造を持っています:

[DataContract]
[KnownType(typeof(ChildClassA))]
[KnownType(typeof(ChildClassB))]
public class MainClass
{          
    [DataMember]
    public string PropA { get; set; }       
    [DataMember]
    public IList<IMyInterface> GenericInterfaceList { get; set; }       
    //....
}    
public interface IMyInterface
{
    int Id { get; set; }        
    //....
}    
[DataContract]
public abstract class BaseClass :  IMyInterface
{
    [DataMember]
    public int Id { get; set; }     
    //....
}    
[DataContract]
public class ChildClassA : BaseClass
{
    //....
}    
[DataContract]
public class ChildClassB : BaseClass
{
    //.....
}

インターフェイスの一般的なリストDataContractSerializerなしで Xml を発行する必要があります。a:anyType i:type=

<MainClass xmlns="MYNAMESPACE" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
    <PropA> dfgdsfg gsd</PropA>
    <GenericInterfaceList xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
        <ChildClassA>
            <Id>1</Id>
        </ChildClassA>
        <ChildClassB>
            <Id>2</Id>
        </ChildClassB>
    </GenericInterfaceList>
</MainClass>

それ以外の:

<MainClass xmlns="MYNAMESPACE" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
    <PropA> dfgdsfg gsd</PropA>
    <GenericInterfaceList xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
        <a:anyType i:type="ChildClassA">
            <Id>1</Id>
        </a:anyType>
        <a:anyType i:type="ChildClassB">
            <Id>2</Id>
        </a:anyType>
    </GenericInterfaceList>
</MainClass>

カスタムで試しましたDataContractResolverが、適切なツールではありません。その Xml を縮小する方法が見つかりません。

4

1 に答える 1

0

ないので方法が見つかりませんでした。

DataContractSerializer ではあまり制御できません。(この明示的な「オプトイン」アプローチを使用して) 何をシリアル化するかを明確に定義できますが、シリアル化する方法をほとんどまたはまったく制御できません。

于 2013-11-20T09:11:49.050 に答える