【问题标题】:Unable to string.Format a C# multiline verbatim string when escaping curly braces转义花括号时无法字符串。格式化 C# 多行逐字字符串
【发布时间】:2019-07-31 16:28:35
【问题描述】:

我在使用转义花括号的逐字字符串上遇到 String.Format 问题。

它正在提高FormatError() Exception:Message: System.FormatException : Input string was not in a correct format.

    String s = $@"{{ ""ver"": ""1.0"",""userId"": ""{0}""}}";
    String.Format(s, "1234")

【问题讨论】:

  • 你为什么使用 string.Format 而不是字符串插值?
  • 不要使用string.Format 字符串插值来生成JSON。创建一个匿名对象并改用 JSON.NET。
  • 我只需要为特定的测试用例生成一个以特定格式编码的json字符串。我不认为使用 JSON.NET 库在这里增加价值。
  • 我不同意@SwissFr。 a) 如果你这样做了,你就不必问这个问题了。 b) 如果userId 的内容需要对 JSON 进行转义/编码,那么您当前的代码将不起作用。

标签: c# string verbatim-string


【解决方案1】:

您正在使用 C# 字符串插值特殊字符“$”,但是,您正在模板中使用位置参数。

应该是:-

String s = @"{{ ""ver"": ""1.0"",""userId"": ""{0}""}}";

String.Format(s, "1234").Dump();

或者只是:-

var userId = 1234;

String s = $@"{{ ""ver"": ""1.0"",""userId"": ""{userId}""}}";

如果您的意图是生成 JSON 输出,更合适的方法是创建对象并使用 Newtonsoft.Json 包对其进行序列化:-

var x = new
{
    ver = "1.0",
    userId = "1234"
};

var s = JsonConvert.SerializeObject(x);

【讨论】:

    猜你喜欢
    • 2016-01-13
    • 2023-03-30
    • 1970-01-01
    • 2023-01-29
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多