Простой способ сериализации ConfigurationElement в JSON - PullRequest
0 голосов
/ 19 апреля 2010

Мне нужно взять часть моей пользовательской конфигурации xxx.config и сериализовать ее как JSON прямо на мою страницу.

Использование DataContractJsonSerializer дает

{"LockItem":false}

Что похоже на ответ XmlSerializer. Кажется, я не могу найти переопределение, которое дает мне контроль над процессом сериализации в классах System.Configuration. Есть ли какие-нибудь хорошие методы для этого, поскольку я должен просто создать набор имитирующих классов DTO и собрать в них данные для сериализации?

1 Ответ

0 голосов
/ 19 апреля 2010

Как я понимаю, вы хотите иметь возможность вручную сериализовать объект, но при этом использовать классы сериализации от .NET к Json.

В этом случае вы можете использовать класс JavaScriptSerializer . Вы можете зарегистрировать конвертер для этого класса, и в этом случае вы полностью контролируете сериализацию передаваемого вами объекта. Перезаписываемый метод Serialize возвращает простой IDictionary, который затем будет напрямую сериализован в json.

Вот пример того, как это выглядит ..

void Main()
{
    var js = new JavaScriptSerializer();
    js.RegisterConverters(new[] { new PonySerializer() });
    js.Serialize(new Bar { Foo = 5 }).Dump();
}

public class PonySerializer : JavaScriptConverter
{
    public override IEnumerable<Type> SupportedTypes
    {
        get { return new [] { typeof(Bar) }; }
    }

    public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
    {
        var result = new Dictionary<string, object>();
        if (obj is Bar)
        {
            var ob = obj as Bar;
            result["Foo"] = ob.Foo;
        }
        return result;
    }

    public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
    {
        throw new NotImplementedException();
    }
}

public class Bar
{
    public int Foo { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...