2013-06-05 3 views
1

У меня есть этот JSON строкуC# - Deserialize JSON строку Enum [] с помощью DataContractJsonSerializer

[ \"postal_code\" ] 

Мое определение перечисления:

[DataContract] 
public enum MyEnum 
{ 
    [EnumMember(Value = "postal_code")] 
    PostalCode, 
} 

Вот что я сделал до сих пор:

byte[] byteArray = Encoding.ASCII.GetBytes(jsonString); 
MemoryStream outputStream = new MemoryStream(byteArray); 
DataContractJsonSerializer dataContractJsonSerializer = new DataContractJsonSerializer(typeof(MyEnum[])); 
MyEnum[] myEnum = (MyEnum[]) dataContractJsonSerializer.ReadObject(outputStream); 
outputStream.Close(); 
//return myEnum ; 

Я получаю сообщение об ошибке при достижении строки ReadObject

System.FormatException: Input string was not in the correct format: nDigits == 0. 

Как правильно десериализовать строку JSON в MyEnum?

Я также хочу избежать использования JSON.Net. Я хочу пойти с DataContractJsonSerializer.

+0

что у вас есть в 'knownTypes'? – yogi

+0

ах, извините, я установил это на нуль, я обновил сообщение –

+0

Я думал о предоставлении TypeConverter или какой-то форме, но я не уверен, как правильно это реализовать. Я попробовал это, но почему-то TypeConverter не вызван. –

ответ

0

как вы можете читать here.

значения члена перечисления рассматриваются как числа в формате JSON, который отличается от того, как они рассматриваются в контрактах данных, где они включены имена членов

Также

Все перечисление члены могут быть сериализованы. Атрибуты EnumMemberAttribute и атрибуты NonSerializedAttribute игнорируются, если они используются.

Итак, попробуйте использовать для этой цели другой десериализатор. Возможно, JSON.net или удлините JsonSerializer, как предложено here.

+0

Почему в мире Microsoft будет обрабатывать значения перечисления по-разному в JSON чем в XML. Он по-прежнему является управлением данными независимо от формата. Это пародия. Я не хочу использовать сериализацию JSON сторонних производителей, но Microsoft не оставляет выбора. – crush

Смежные вопросы