2010-11-24 39 views
6

here'dan aşağıdaki koda bakın.
Bu, bir veri sözleşmesinde (nesne modeli, nesne grafiği, etki alanı modeli) wcf'de serileştirme sırasında dairesel referansların korunmasıyla ilgilidir. bu nedenle, önceki CreateSerializer yöntem ve -Seri hale getirmede bir kod örneğinde sonsuz döngü

class ReferencePreservingDataContractSerializerOperationBehavior 
     :DataContractSerializerOperationBehavior 
    { 
     public ReferencePreservingDataContractSerializerOperationBehavior(
      OperationDescription operationDescription) 
      : base(operationDescription) { } 

     public override XmlObjectSerializer CreateSerializer(
      Type type, string name, string ns, IList<Type> knownTypes) 
     { 
      return CreateDataContractSerializer(type, name, ns, knownTypes); 
     } 

     private static XmlObjectSerializer CreateDataContractSerializer(
      Type type, string name, string ns, IList<Type> knownTypes) 
     { 
      return CreateDataContractSerializer(type, name, ns, knownTypes); 
     } 

     public override XmlObjectSerializer CreateSerializer(
      Type type, XmlDictionaryString name, XmlDictionaryString ns, 
      IList<Type> knownTypes) 
     { 
      return new DataContractSerializer(type, name, ns, knownTypes, 
       0x7FFF /*maxItemsInObjectGraph*/, 
       false/*ignoreExtensionDataObject*/, 
       true/*preserveObjectReferences*/, 
       null/*dataContractSurrogate*/); 
     } 
    } 

sonsuz bir döngüye (stackoverflow) oluşturmayan CreateDataContractSerializer mi?

private static XmlObjectSerializer CreateDataContractSerializer(
      Type type, string name, string ns, IList<Type> knownTypes) 
     { 
      return CreateDataContractSerializer(type, name, ns, knownTypes); 
     } 

Şimdi bu yöntemler kullanımda değil midir? Burada neyi özlüyorum?

cevap

3

Gerçekten öyle görünüyor. Çalışması, sadece son aşırı yükün şu anda çalıştırıldığını göstermektedir. Farklı parametreler bulunduğundan, belki de statik yöntemin kaybedilmesi daha iyi olacaktır (bu yardımcı olmuyor):

public override XmlObjectSerializer CreateSerializer(
    Type type, string name, string ns, IList<Type> knownTypes) 
{ 
    return new DataContractSerializer(type, name, ns, knownTypes, 
     0x7FFF /*maxItemsInObjectGraph*/, 
     false/*ignoreExtensionDataObject*/, 
     true/*preserveObjectReferences*/, 
     null/*dataContractSurrogate*/); 
} 

public override XmlObjectSerializer CreateSerializer(
    Type type, XmlDictionaryString name, XmlDictionaryString ns, 
    IList<Type> knownTypes) 
{ 
    return new DataContractSerializer(type, name, ns, knownTypes, 
     0x7FFF /*maxItemsInObjectGraph*/, 
     false/*ignoreExtensionDataObject*/, 
     true/*preserveObjectReferences*/, 
     null/*dataContractSurrogate*/); 
}