elasticsearch,C#,Json,Linq,elasticsearch" /> elasticsearch,C#,Json,Linq,elasticsearch" />

C# 将JObject转换为匿名类型

C# 将JObject转换为匿名类型,c#,json,linq,elasticsearch,C#,Json,Linq,elasticsearch,我有一个作业对象,想将该作业对象格式化为一个对象。我的JSON stirng是 {"Prop1":"Prop1Value","Prop2":1,"Prop3":"Prop3Value","dtProp":"2019-12-30T09:59:48"} 我希望此JSON字符串的格式为 { Prop1 = "Prop1Value", Prop2 = 1, Prop3 = "Prop3Value", dtProp = "2019-12-30T09:59:48" }

我有一个作业对象,想将该作业对象格式化为一个对象。我的JSON stirng是

{"Prop1":"Prop1Value","Prop2":1,"Prop3":"Prop3Value","dtProp":"2019-12-30T09:59:48"}
我希望此JSON字符串的格式为

{
    Prop1 = "Prop1Value",
    Prop2 = 1,
    Prop3 = "Prop3Value",
    dtProp = "2019-12-30T09:59:48"
} 

我们怎样才能做到这一点?我的JSON字符串不是强类型对象。但我想把它转换成这种格式。我的Json字符串不会每次都相同。它每次都在变化。我可以为此场景动态创建对象吗

请注意,JSON的格式不是
=
,而是
。使用
=
格式化后,您将无法对其进行反序列化

你可以这样做

  string newFormatted = JsonConvert.SerializeObject(JObject.Parse(json), Formatting.Indented).Replace(":", "=");
  Console.WriteLine(newFormatted);
输出

{
  "Prop1"= "Prop1Value",
  "Prop2"= 1,
  "Prop3"= "Prop3Value",
  "dtProp"= "2019-12-30T09=59=48"
}
{
  Prop1= "Prop1Value"
  Prop2= 1
  Prop3= "Prop3Value"
  dtProp= "2019-12-30T09=59=48"
}
在按键上不带引号打印

如果您对打印不带引号的键感兴趣,可以运行以下方法。此方法打断每一行并删除每个键的引号

    string str = JsonConvert.SerializeObject(JObject.Parse(json), Formatting.Indented);
    string newStr = string.Empty;
    str.Split(Environment.NewLine).ToList().ForEach(line => newStr += string.Join("=", line.Split(':').Select((x, index) => index % 2 == 0 ? x.Replace(@"""", "") : x)) + Environment.NewLine);
输出

{
  "Prop1"= "Prop1Value",
  "Prop2"= 1,
  "Prop3"= "Prop3Value",
  "dtProp"= "2019-12-30T09=59=48"
}
{
  Prop1= "Prop1Value"
  Prop2= 1
  Prop3= "Prop3Value"
  dtProp= "2019-12-30T09=59=48"
}

听起来像一个。您能使用中所示的
ExpandoObject
吗?如果不是,在运行时真正创建匿名类型对象是非常困难的,请参阅。或者您正在寻找?这个问题显示了如何用
=
替换JSON对象键和值之间的
分隔符。我会选择QuoteName属性或类似的简单内容,OP希望在值周围加引号的位置是什么?是的,我不希望在输出中加引号。