Générer des retours à la ligne au lieu de CRLFs dans Json.Net
Pour ma unix/java les amis, je voudrais envoyer des retours à la ligne ('\n') au lieu d'un CRLF (
'\r\n') dans Json.Net. J'ai essayé de fixer un StreamWriter pour utiliser un saut de ligne, sans succès.
Je pense que Json.Net code à l'aide de Environment.NewLine
au lieu de l'appeler TextWriter.WriteNewLine()
. Changer Environment.NewLine
n'est pas une option parce que je suis en cours d'exécution en tant que serveur et le retour à la ligne de codage est basé sur la demande.
Est-il une autre façon pour forcer un saut de ligne pour crlf?
Voici mon code -
using (var streamWriter = new StreamWriter(writeStream, new UTF8Encoding(false))
{
NewLine = "\n"
})
using (var jsonWriter = new JsonTextWriter(streamWriter)
{
CloseOutput = true,
Indentation = 2,
Formatting = Formatting.Indented
})
{
//serialise object to JSON
}
si le " le retour à la ligne de codage est basé sur la demande.' - pourquoi n'est-il pas mis à la LF pour les clients unix?
Quid de la Chaîne.chr(13) + String.chr(10)?
merci mais je travaille en c# et pas VB et je sais déjà comment représenter un CRLF comme une chaîne de caractères.
Juste pour clarifier, parlez-vous des retours à la ligne émis pour
Quid de la Chaîne.chr(13) + String.chr(10)?
Environment.NewLine
est globale (statique) de la variable. Dans un serveur, j'ai plusieurs threads en cours d'exécution; jamais l'esprit async
co-routines. J'ai besoin d'un localisée méthode de spécification de la nouvelle ligne de chaîne.merci mais je travaille en c# et pas VB et je sais déjà comment représenter un CRLF comme une chaîne de caractères.
Juste pour clarifier, parlez-vous des retours à la ligne émis pour
Formatting.Indented
ou des retours à la ligne au sein de la chaîne de valeurs dans l'objet à sérialiser? Si c'est l'ancien, pourquoi êtes-vous à l'aide de formaté JSON? Sûrement le client ne se soucie pas si une chaîne JSON est bien mis en forme avec des sauts de ligne.OriginalL'auteur Richard Schneider | 2014-05-11
Vous devez vous connecter pour publier un commentaire.
Si vous souhaitez personnaliser l'indentation d'espaces, de substituer
JsonTextWriter.WriteIndent
:Json.NET utilise
Environment.NewLine
pour la mise en forme, donc il n'y a pas d'autre moyen. Vous pouvez essayer ce qui suggère que cette personnalisation dans le bug tracker.Je viens de faire. Merci encore.
OriginalL'auteur Athari
Après de fouiller dans les Json.Net code, je vois que le problème est avec
JsonTextWriter.WriteIndent
, grâce Athari.Au lieu de
_writer.Write(Environment.NewLine);
il devrait être_writer.WriteLine();
.J'ai posté une demande d'extraction de github. https://github.com/JamesNK/Newtonsoft.Json/pull/271
OriginalL'auteur Richard Schneider
Sur le fil de protocole pour à peu près tout ce n'est qu'une ligne se termine par crlf. Si vous sentez que vous devez vraiment le faire, le post traitement est le chemin à parcourir -- l'écrire dans une chaîne, puis modifiez la chaîne avant de la retourner.
Noter que c'est beaucoup de traitement supplémentaire pour ce que je considère être un réel négatif. Pas recommandé.
OriginalL'auteur jmoreno
Je vois plusieurs solutions ici que de la configuration de la sérialiseur. Mais si vous voulez rapide et sale, il suffit de remplacer les caractères avec ce que vous voulez. Après tout, JSON est juste une chaîne de caractères.
De quoi vous faire croire qu'il a une perte de performance. Je pense que
SerializeObject
est beaucoup plus lent questring.Replace
.OriginalL'auteur mason
Je sais que c'est une vieille question, mais j'ai eu du mal à faire la accepté de répondre à de travail et de maintenir une bonne mise en forme en retrait. En plus, je ne suis pas aussi la création d'une substitution pour faire ce travail.
Voici comment j'ai obtenu ce pour fonctionner correctement:
Je suis en supposant que le code les changements référencées dans cette question a permis l'établissement de
NewLine
sur leStringWriter
être respecté par le sérialiseur.OriginalL'auteur Ryan Butcher
résultat = résultat.Remplacer(@"\r\n" "\n");
Cette réponse n'a pas besoin de rajouté une explication. Pour être franc (toutes mes excuses), il devrait être supprimé. Il n'a pas beaucoup d'effort, et - plus important - il est un peu double emploi avec une réponse qui a déjà été donné il y a quatre ans (stackoverflow.com/a/23588433/2819245) sans rien ajouter de la valeur (et en prime, il utilise à tort un verbatim littéral de chaîne). En regardant cela, je ne peux que penser "Pourquoi?"
OriginalL'auteur Balaji Ganesan