WCF DataContracts

Существует несколько библиотек кэширования, которые могут вызвать такую ​​проблему, как ваша (opcache, (устаревший) APC, ...). Обычно у вас есть возможность аннулировать кэшированные файлы, что заставляет PHP перечитывать их из файловой системы.

Например, проверьте свою конфигурацию PHP для opcache и (если применимо) попробуйте что-то вроде opcache_invalidate ('yourscript.php'); .

(Обновление: ссылка удалена, спасибо @duskwuff)

12
задан Craig Wilson 5 October 2008 в 21:35
поделиться

1 ответ

Свойства только для чтения прекрасны, пока Вы отмечаете поле (нетолько для чтения) как [DataMember], не свойство. В отличие от XmlSerializer, IIRC DataContractSerializer не использует значение по умолчанию ctor - это использует отдельный отражательный механизм для создания неинициализированных экземпляров. За исключением "Маслины" mono (порт WCF), где это действительно использует значение по умолчанию ctor (в данный момент, или в какой-то момент в недалеком прошлом).

Пример:

using System;
using System.IO;
using System.Runtime.Serialization;
[DataContract]
class Foo
{
    [DataMember(Name="Bar")]
    private string bar;

    public string Bar { get { return bar; } }

    public Foo(string bar) { this.bar = bar; }
}
static class Program
{
    static void Main()
    {
        DataContractSerializer dcs = new DataContractSerializer(typeof(Foo));
        MemoryStream ms = new MemoryStream();
        Foo orig = new Foo("abc");
        dcs.WriteObject(ms, orig);
        ms.Position = 0;
        Foo clone = (Foo)dcs.ReadObject(ms);
        Console.WriteLine(clone.Bar);
    }
}
24
ответ дан 2 December 2019 в 06:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: