C# 更改json中的对象元素
我有一个像这样的JSONC# 更改json中的对象元素,c#,.net,json,json.net,C#,.net,Json,Json.net,我有一个像这样的JSON { "amounts": [ { "tid": 7072, "amount": 10000, "currency": "USD" }, { "tid": 7072, "amount": 4000, "currency": "USD" } ],
{
"amounts": [
{
"tid": 7072,
"amount": 10000,
"currency": "USD"
},
{
"tid": 7072,
"amount": 4000,
"currency": "USD"
}
],
"status": 0,
"errorCode": 0
}
我需要从这个JSON中检索amount值,并将其除以10。之后,我想替换原始json中的amount值。我该怎么做?我正在使用.Net json工具,如NEwtonsoft json。使用以下工具生成类:
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp11
{
class Program
{
static void Main(string[] args)
{
var js = "{\"amounts\": [ { \"tid\": 7072, \"amount\": 10000, \"currency\": \"USD\" }, { \"tid\": 7072, \"amount\": 4000, \"currency\": \"USD\" } ], \"status\": 0, \"errorCode\": 0}";
var obj = Welcome.FromJson(js);
for (int i = 0; i < obj.Amounts.Length; i++)
{
obj.Amounts[i].AmountAmount /= 10;
}
var newjs = Serialize.ToJson(obj);
Console.WriteLine(newjs);
Console.ReadKey();
}
}
public partial class Welcome
{
[JsonProperty("amounts")]
public Amount[] Amounts { get; set; }
[JsonProperty("status")]
public long Status { get; set; }
[JsonProperty("errorCode")]
public long ErrorCode { get; set; }
}
public partial class Amount
{
[JsonProperty("tid")]
public long Tid { get; set; }
[JsonProperty("amount")]
public long AmountAmount { get; set; }
[JsonProperty("currency")]
public string Currency { get; set; }
}
public partial class Welcome
{
public static Welcome FromJson(string json) => JsonConvert.DeserializeObject<Welcome>(json, Converter.Settings);
}
public static class Converter
{
public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
{
MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
DateParseHandling = DateParseHandling.None,
Converters = {
new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
},
};
}
public static class Serialize
{
public static string ToJson(this Welcome self)
{
return JsonConvert.SerializeObject(self, Converter.Settings);
}
}
}
使用Newtonsoft.Json;
使用Newtonsoft.Json.Converters;
使用制度;
使用System.Collections.Generic;
利用制度全球化;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
名称空间控制台AP11
{
班级计划
{
静态void Main(字符串[]参数)
{
var js=“{\\\\\”:[{\\\\\”:7072,\\\\\\\:10000,\\'currency\\:\'USD\'},{\'tid\':7072,\'amount\':4000,\'currency\':\'USD\'}],\'status\':0,\'errorCode\':0};
var obj=Welcome.FromJson(js);
for(int i=0;iJsonConvert.DeserializeObject(json,Converter.Settings);
}
公共静态类转换器
{
公共静态只读JsonSerializerSettings设置=新JsonSerializerSettings
{
MetadataPropertyHandling=MetadataPropertyHandling.Ignore,
DateParseHandling=DateParseHandling.None,
转换器={
新的IsoDateTimeConverter{DateTimeStyles=DateTimeStyles.AssumeUniversal}
},
};
}
公共静态类序列化
{
公共静态字符串ToJson(此欢迎自我)
{
返回JsonConvert.SerializeObject(self,Converter.Settings);
}
}
}
私有字符串分割金额(字符串str,int分母)
{
var obj=(JObject)JsonConvert.DeserializeObject(str);
foreach(obj中的var金额[“金额”])
{
风险价值=金额。价值(“金额”);
var newValue=值/分母;
金额[“金额”]=新值;
}
返回obj.ToString();
}
使用Newtonsoft.Json。
添加对参数“分母”的检查以避免被零除错误。从like生成quicktype
输出:
我认为您的json是错误的::它应该是这样的:
{“amounts”:[{“tid”:7072,“amount”:10000,“currency”:“USD”},{“tid”:7072,“amount”:4000,“currency”:“USD”}],“status”:0,“errorCode”:0}
您想检索第一个还是第二个对象的金额?取回后,你必须把它除以10,对吗?是的。我想两者都检索。反序列化它,处理对象并再次序列化。只需在数据['amounts']
中为循环运行,对于循环的每次迭代,您可以循环变量['amount']=循环变量['amount']/10
private string DivideAmounts(string str, int denominator)
{
var obj = (JObject)JsonConvert.DeserializeObject(str);
foreach (var amount in obj["amounts"])
{
var value = amount.Value<int>("amount");
var newValue = value / denominator;
amount["amount"] = newValue;
}
return obj.ToString();
}
public class Amount
{
public int tid { get; set; }
public int amount { get; set; }
public string currency { get; set; }
}
public class RootObject
{
public List<Amount> amounts { get; set; }
public int status { get; set; }
public int errorCode { get; set; }
}
class Program
{
static void Main(string[] args)
{
string inputJson = @"{'amounts':[{'tid':7072,'amount':10000,'currency':'USD'},{'tid':7072,'amount':4000,'currency':'USD'}],'status':0,'errorCode':0}";
RootObject rootObject = JsonConvert.DeserializeObject<RootObject>(inputJson);
foreach (var item in rootObject.amounts)
{
item.amount = item.amount / 10;
}
//OR you can do it with shorter version of foreach
//rootObject.amounts.ForEach(x => x.amount = x.amount / 10);
string outputJson = JsonConvert.SerializeObject(rootObject);
Console.WriteLine(outputJson);
Console.ReadLine();
}
}