2014-01-18 7 views
4

Рассмотрим следующий JSON объект:Десятичная точность при сериализации двойников в JSON

{ 
    "value": 0 
} 

Теперь предположим, я картирование это тип .NET Foo:

class Foo 
{ 
    public double Value { get; set; } 
} 

Тип Foo.Value равен double, так как Value не всегда является интегралом er.

Использование Json.NET, это прекрасно работает:

Foo deserialized = JsonConvert.DeserializeObject<Foo>(json); 

Однако, наблюдать, что происходит, когда я пытаюсь преобразовать объект обратно в JSON представления:

string serialized = JsonConvert.SerializeObject(deserialized, Formatting.Indented); 

Выход:

{ 
    "Value": 0.0 
} 

Обратите внимание на конечный ноль? Как я могу избавиться от него?

EDIT

Я подозреваю, что ответ будет написать свой собственный конвертер. Если да, тогда все в порядке, и я думаю, что я соглашусь с этим в ответ. Мне просто интересно, может быть, существует атрибут, о котором я не знаю, который позволяет указать выходной формат (или аналогичный).

+6

Почему, чтобы избавиться от него? – elyashiv

+0

Такая цифровая буквальная нотация ('DIGITS.DIGITS') обычно обозначает двойной тип для C-подобных языков программирования. На основе этих обозначений анализатор JSON мгновенно десериализует это значение с использованием правильного типа данных, избегая дополнительного шага трансляции/преобразования при установке значения в вашем объекте C#. – tiguchi

+0

@elyashiv, потому что я стараюсь как можно ближе придерживаться первоначальной спецификации. Но независимо от того, кто-то не должен иметь значения. Я уверен, что для этого существуют реальные варианты использования. –

ответ

4

Оказывается, что это жестко закодированы поведение библиотеки:

https://github.com/JamesNK/Newtonsoft.Json/blob/master/Src/Newtonsoft.Json/JsonConvert.cs#L300

Если вы хотите изменить поведение вам нужно отредактировать библиотеку и перекомпиляции из источника (или выберите другой Библиотека JSON)

+0

Nice find! Это отвечает за меня. Я просто напишу для этого специальный конвертер. –

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