Мне нужно отправить запрос в службу отдыха wcf (4.0).Эта служба будет вызываться как из клиентских приложений (jquery), так и из серверных приложений (asp.net и т. Д.).Служба открывает постоянное хранилище и предоставляет операции CRUD.
У меня проблема с сериализацией.
Я прочитал несколько статей, связанных с этим -> http://blogs.msdn.com/b/youssefm/archive/2009/04/21/understanding-known-types.aspx
public class CustomType
{
public Dictionary<string,object> CustomObjectCollection {get; set;}
public SavedBy {get; set;}
public SavedOn {get; set;}
public CustomType()
{
CustomObjectCollection = new Dictionary<string,object>();
}
}
public class State1
{
public prop1 {get; set;}
public prop2 {get; set;}
}
public class State2
{
public prop1 {get; set;}
public prop2 {get; set;}
}
Клиент, использующий WCF:
public void save()
{
CustomType req = new CustomType();
req.CustomObjectCollection("State1", new State1() {prop1 = val1, prop2 = val2 } );
req.CustomObjectCollection("State2", new State2() {prop1 = val3, prop2 = val4 } );
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(CustomType));
MemoryStream ms = new MemoryStream();
serializer.WriteObject(ms, setting);
string json = Encoding.Default.GetString(ms.ToArray());
ms.Close();
Utility.HTTPRequest("http://localhost:2222/MyWCFRestSVC/save", "post", json);
}
Метод WCF:
public bool Save(CustomType req)
{
/////////
}
Возможно, я не смогу использовать обходной путь "известных типов", поскольку каждый клиент, который использует эту услугубудет использовать свои собственные типы.В идеале сервис не должен беспокоиться о типах, которые клиенты хотят сохранить.Обратите внимание, что сервис предоставляет постоянное хранилище, в котором хранится общая информация о состоянии.
Я попробовал «Словарь» вместо «Словарь», где я храню строковые представления json os State1 и State2 в качестве значений.Проблема, с которой я столкнулся, заключалась в том, что, когда я использовал DataContractJsonSerializer для сериализации экземпляра CustomType, строки json для State1 & State2 получили встроенные в них обратные слэши (escape-символы) из-за двойной сериализации, я полагаю?
У меня были мысли опользовательская сериализация вместо DataContractJsonSerializer.
Пожалуйста, дайте мне знать ваши мысли.
Спасибо за ваше время.