我有一个json像下面这样

{
    "Title": null,
    "ProjectName": {
        "@Label": "Project Name",
        "Value": "Test Project Name",
        "@Template": ""
    },
    "ModelNo": {
        "@Label": "Model",
        "Value": "Test Model Number",
        "@Template": ""
    }    
}

我想把它转换成xml,如下所示:

<Root>
    <Title>Test Title</Title>
    <ProjectName Label="Project Name" Template="">Test Project Name</ProjectName>
    <ModelNo Label="Model" Template="">Test Model Number</ModelNo>
</Root>

目前,我用的东西按JsonConvert.DeserializeXmlNode(Json.ToString())XmlAttribute,结果就是

<Root>
    <Title>Test Title</Title>
    <ProjectName Label="Project Name" Template=""><Value>Test Project Name</Value></ProjectName>
    <ModelNo Label="Model" Template=""><Value>Test Model Number</Value></ModelNo>
</Root>

如何确保没有Value,并将Value映射到xml文本

推荐答案

您可以通过LINQ to JSON API替换/构建新的JSON.例如(假设源值在JSON中,否则分析和操作jp.Value):

var js = """
         {
             "Title": "Test Title",
             "ProjectName": {
                 "@Label": "Project Name",
                 "Value": "Test Project Name",
                 "@Template": ""
             },
             "ModelNo": {
                 "@Label": "Model",
                 "Value": "Test Model",
                 "@Template": ""
             }
         }
         """;
var jObject = JObject.Parse(js);
var jsonProperties = jObject.Descendants()
    .OfType<JProperty>()
    .Where(jp => jp.Name == "Value")
    .ToList();
foreach (JProperty jp in jsonProperties)
{
  // replace "Value" with "#text" property name 
  jp.Replace(new JProperty("#text", jp.Value)); 
}

var deserializeXmlNode = JsonConvert.DeserializeXmlNode(jObject.ToString(), "Root");

Console.WriteLine(deserializeXmlNode.OuterXml);

结果(格式):

<Root>
    <Title>Test Title</Title>
    <ProjectName Label="Project Name" Template="">Test Project Name</ProjectName>
    <ModelNo Label="Model" Template="">Test Model</ModelNo>
</Root>

Csharp相关问答推荐

C# uwp中的Win11启动屏幕剪辑工作方式不同

如何告诉自己创建的NuGet包在应用程序中发生了变化?

. NET Core DB vs JSON模型设计

使用C#HttpClient以多部分形式数据发送带有非ASCII文件名的文件的问题

使用可信第三方的Iext8.Net pdf签名

如何通过寻找向量长度来优化两个循环?

CRL已过期,但ChainStatus告诉我RevocationStatus未知

MudBlazor Textfield已禁用,但其验证工作正常

如何在mediatr命令中访问HttpContext而不安装弃用的nuget包

在C#中,当输入一个方法/局部函数时,我的IEnumerator被重置/重新创建.为什么?

两个DateTimeOffset之间的差异返回意外的负值

Blazor服务器项目中的Blazor/.NET 8/Web API不工作

KeyDown从我的文本框中删除输入,如何停止?

C#无法将.csv列转换为用于JSON转换的列表

游戏对象走向不同的方向

与另一个对象位于同一位置的对象具有不同的变换位置

无法创建&Quot;&Quot;类型的实例,因为无法将一个或多个参数绑定到

同时通过多个IEumable<;T&>枚举

如何查找Span;T&>是否包含相同顺序的其他Span<;T&>

无法通过服务控制台启动.NET Core 6.0服务(错误1053)