2015-09-17 7 views
4

У меня есть такой метод.DataContractJsonSerializer и JsonConvert дают отличный результат

using (MemoryStream memoryStream = new MemoryStream()) 
{ 
    DataContractJsonSerializer dataContractSerializer = new DataContractJsonSerializer(typeof(Message), this.knowTypes); 
    dataContractSerializer.WriteObject(memoryStream, message); 

    byte[] byteArray = memoryStream.ToArray(); 
    memoryStream.Close(); 
    return byteArray; 
} 

Когда я конвертировать ByteArray, в строку результат, как показано ниже: {"__type":"Login:#Project.ProjectName.Sockets","Password":"F9AAD6B7CFBD2A756101","Username":"UserName"}

Этот результат имеет смысл моего сервера.

Однако я хочу изменить этот код из-за некоторых проблем с символами.

byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(message)); 
return byteArray; 

Теперь я конвертировать ByteArray, нанизывать результат как: {"Username":"UserName","Password":"F9AAD6B7CFBD2A756101"}

Кроме того, я пытался использовать JsonSerializerSettings

settings = new JsonSerializerSettings(); 
settings.TypeNameAssemblyFormat = System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Full; 
settings.TypeNameHandling = TypeNameHandling.Objects; 

и результат {"$type":"Project.ProjectName.Sockets.Login, ProjectName","Username":"UserName","Password":"F9AAD6B7CFBD2A756101"}

В чем разница между DataContractJsonSerializer и JsonConvert, и это по чтобы получить тот же результат с помощью JsonConvert.

+0

ли это возможность изменить и сериализации и десериализации конец с 'Json.NET'? –

+0

Формат подсказок типа Json.NET жестко запрограммирован. См. [Формат «Специальное свойство» (тип $) жестко запрограммирован] (https://json.codeplex.com/workitem/22429). – dbc

+0

Возможный дубликат? [JSON.Net - Изменить поле $ type на другое имя?] (Http://stackoverflow.com/questions/9490345/json-net-change-type-field-to-another-name). – dbc

ответ

0

Пропустите следующие настройки в DataContractJsonSerializer, и вы никогда не должны получить какую-либо информацию типа:

DataContractJsonSerializerSettings settings = new DataContractJsonSerializerSettings() 
{ 
    EmitTypeInformation = EmitTypeInformation.Never 
}; 
+2

Я думаю, что ОП хочет излучать информацию о типе, только в другой структуре. –

+0

DataContractJsonSerializerSettings предназначен для .Net 4.5 и более поздних версий. Также я забыл сказать, что я использую silverlight 5, поэтому я не могу использовать 'DataContractJsonSerializerSettings', – Blast