Как сериализовать / десериализовать объект JsonValue в и из XML в веб-службе WCF, использующей Web Api? - PullRequest
1 голос
/ 03 ноября 2011

Итак, я работал над веб-службой WCF, используя последнюю сборку веб-API, и мне нравится объект JsonValue.

Я хочу принять JSON, связанный с объектом JsonValue, затем преобразовать этот объект JsonValue в эквивалентное представление XML, которое можно передать в хранимую процедуру для обработки.Это избавляет от необходимости создавать объекты для привязки JsonValue, и это делает вещи текучими.

Затем я хотел бы иметь возможность выбрать данные из базы данных в форме XML и затем преобразовать их в JsonValue для возвратаклиенту.

Мне удалось преобразовать JsonValue в строковое представление XML с помощью этого метода расширения:

// Convert JsonValue to XML string
public static string ToXmlString(this JsonValue instance) {
    using (var ms = new MemoryStream()) {
        using (var xdw = XmlDictionaryWriter.CreateTextWriter(ms)) {
            instance.Save(xdw);
            xdw.Flush();
            return Encoding.UTF8.GetString(ms.ToArray());
        }
    }
}

Есть ли лучший способ сделать это?Этот метод хорош, но мне просто интересно.

Я также смог преобразовать значение строки XML обратно в JsonValue, используя библиотеку Json.NET, чтобы преобразовать строку XML в строку JSON и затем загрузить строку вОбъект JsonValue выглядит так:

// Return JSON representation of XML
return JsonValue.Parse(JsonConvert.SerializeXNode(xmlElement, Formatting.None, true));

Этот подход хорош, но я бы не хотел зависеть от библиотеки Json.NET, поскольку я включил ее исключительно для этого метода.Есть ли способ сделать это без использования библиотеки Json.NET?

Заранее благодарим за любую помощь!

Даниил

Ответы [ 2 ]

1 голос
/ 03 ноября 2011

Ваш код конверсии хорош. Чтобы преобразовать обратно из XML в JsonValue, вы можете использовать класс JsonValueExtensions в веб-API:

// Convert JsonValue to XML string
public static string ToXmlString(this JsonValue instance) {
    using (var ms = new MemoryStream()) {
        using (var xdw = XmlDictionaryWriter.CreateTextWriter(ms)) {
            instance.Save(xdw);
            xdw.Flush();
            return Encoding.UTF8.GetString(ms.ToArray());
        }
    }
}

// Convert XML string to JsonValue
public static JsonValue FromXmlString(this string jsonAsXml) {
    using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonAsXml))) {
        using (var xdr = XmlDictionaryReader.CreateTextReader(ms, XmlDictionaryReaderQuotas.Max))) {
            return JsonValueExtensions.Load(xdr);
        }
    }
}
0 голосов
/ 03 ноября 2011

Вам это не подходит?

XmlDocument doc = (XmlDocument)JsonConvert.DeserializeXmlNode(json);
...