如何遍历newtonsoft.json的JObject里的JSON数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何遍历newtonsoft.json的JObject里的JSON数据相关的知识,希望对你有一定的参考价值。

参考技术A 很简单,你只需一台机器上创建共享文件夹,以便所有的机器都可以访问。自己的东西都放在里面,只需输入一个共享文件夹内运行的其他机器,在机器\\就行了IP地址。 参考技术B ,你只需一台机器上创建共享文件夹,以便所有的机器都可以访问。自己的东西都放在里面,只需输入一个共享文件夹内运行的其他机器, 参考技术C 原理如下 // using Newtonsoft.Json.Linq; var jObject = JObject.Parse(testString); Console.WriteLine(jObject["data"]["__T"]["0"]["tid"]); ; Console.WriteLine(jObject["data"]["__T"]["0"]["fid"]); ; Console.WriteLine(jObject[本回答被提问者采纳

如何在MS构建任务中使用NewtonSoft.json?

我有一个构建任务,我想在其中使用newtonsoft.json进行一些json序列化/反序列化,如下所示:

<UsingTask TaskName="ReplaceFileText" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)Microsoft.Build.Tasks.v4.0.dll">
    <ParameterGroup>
      <TargetFilename ParameterType="System.String" Required="true" />
      <SourceFilename ParameterType="System.String" Required="true" />
    </ParameterGroup>
    <Task>
      <Reference Include="System.Core" />

      <Using Namespace="System" />
      <Using Namespace="System.IO" />

      <Code Type="Fragment" Language="cs">
        <![CDATA[

            string sourceJsonString = File.ReadAllText(SourceFilename);
            string targetJsonString = File.ReadAllText(TargetFilename);

            dynamic sourceJson = JsonConvert.DeserializeObject(sourceJsonString);
            dynamic targetJson = JsonConvert.DeserializeObject(targetJsonString);

            targetJson.firstProperty = sourceJson.firstProperty;
            targetJson.secondProperty = sourceJson.secondProperty;


            targetJsonString = JsonConvert.SerializeObject(targetJson, Formatting.Indented);

            File.WriteAllText(targetFilename, targetJsonString);

          ]]>
      </Code>
    </Task>
  </UsingTask>

  <Target Name="TransformsWithStaging" BeforeTargets="Build">
    <ReplaceFileText TargetFilename="$(ProjectDir)appsettings.json" SourceFilename="$(ProjectDir)appsettings.Staging.json" />
  </Target>

上面的代码不起作用,因为我在上面的任务中使用了NewtonSoft.Json,这个任务没有引用。

如何在构建任务中导入或引用NewtonSoft.Json。我使用的是Visual Studio 2017 Professional,.NET Core 2.0,该项目是WebApi应用程序吗?

答案

如何在构建任务中导入或引用NewtonSoft.Json。

由于您使用的是Visual Studio 2017 Professional,.NET Core 2.0且该项目是WebApi应用程序,因此您可以在.csproj文件中找到以下代码段:

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.3" />
    <PackageReference Include="Newtonsoft.Json" Version="10.0.3" />
  </ItemGroup>

所以参考NewtonSoft.Json被添加到项目中。但是我们无法在任务中引用它。因为任务dll不能引用任何包 - 它们被加载到正在运行的msbuild实例中,并且只能引用托管msbuild实例可用的dll。有关详细信息,请参阅this thread

作为解决方法,您可以尝试直接从packages文件夹中引用dll文件:

    <Task>
        <Reference Include="C:Users<UseraName>.nugetpackages
ewtonsoft.json10.0.3lib
etstandard1.3Newtonsoft.Json.dll" />
        <Code Type="Fragment" Language="cs">...working fine...</Code>
    </Task>

希望这可以帮助。

另一答案

使用以下内容:

<UsingTask TaskName="ReplaceFileText" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)Microsoft.Build.Tasks.v4.0.dll">
    <ParameterGroup>
      <TargetFilename ParameterType="System.String" Required="true" />
      <SourceFilename ParameterType="System.String" Required="true" />
    </ParameterGroup>
    <Task>
      <Reference Include="System.Core" />
      <Reference Include="System.Runtime" />
      <Reference Include="System.Dynamic.Runtime" />
      <Reference Include="$(USERPROFILE).nugetpackagesmicrosoft.netcore.app2.0.0
ef
etcoreapp2.0System.ObjectModel.dll" />
      <Reference Include="$(USERPROFILE).nugetpackages
ewtonsoft.json10.0.3lib
etstandard1.3Newtonsoft.Json.dll" />
      <Reference Include="$(USERPROFILE).nugetpackagessystem.runtime.serialization.primitives4.1.1lib
etstandard1.3System.Runtime.Serialization.Primitives.dll" />

      <Using Namespace="System" />
      <Using Namespace="System.IO" />
      <Using Namespace="System.Collections.Specialized" />
      <Using Namespace="Newtonsoft.Json" />
      <Using Namespace="Newtonsoft.Json.Linq" />

      <Code Type="Fragment" Language="cs">
        <![CDATA[

            string sourceJsonString = File.ReadAllText(SourceFilename);
            string targetJsonString = File.ReadAllText(TargetFilename);

            JObject sourceJsonObject = JObject.Parse(sourceJsonString);
            JObject targetJsonObject = JObject.Parse(targetJsonString);

            targetJsonObject["someProperty"] = sourceJsonObject["someProperty"];

            File.WriteAllText(TargetFilename, targetJsonObject.ToString());

          ]]>
      </Code>
    </Task>
  </UsingTask>

  <Target Name="TransformsWithDevelopment" Condition="'$(Configuration)'=='Development'" BeforeTargets="Build">
    <ReplaceFileText TargetFilename="$(ProjectDir)appsettings.json" SourceFilename="$(ProjectDir)appsettings.Development.json" />
  </Target>

  <Target Name="TransformsWithStaging" Condition="'$(Configuration)'=='Staging'" BeforeTargets="Build">
    <ReplaceFileText TargetFilename="$(ProjectDir)appsettings.json" SourceFilename="$(ProjectDir)appsettings.Staging.json" />
  </Target>

  <Target Name="TransformsWithProduction" Condition="'$(Configuration)'=='Production'" BeforeTargets="Build">
    <ReplaceFileText TargetFilename="$(ProjectDir)appsettings.json" SourceFilename="$(ProjectDir)appsettings.Production.json" />
  </Target>

以上是关于如何遍历newtonsoft.json的JObject里的JSON数据的主要内容,如果未能解决你的问题,请参考以下文章

关于Newtonsoft.Json解析json字符串

如何使用 C# 进行条件序列化 - NewtonSoft.Json

如何”Newtonsoft.Json.Linq.JValue”的对象强制转换为类型“Newtonsoft.Json.Linq.JArray"?

如何通过NewtonSoft反序列化对象json列表?

如何使用 Newtonsoft.JSON 解析 JSON 响应? [复制]

如何使 Newtonsoft.Json.Linq.JObject 不可变?