如何修复Deserialize对象忽略数字开头的0,但我希望0保持原样



var crmData=(JObject(JsonConvert。反序列化对象(metaData.metaData(;

在上面的表达式中

元数据。元数据包含来自UI的正确值,如下所示

metaData.MetaData = "{ ApplicationFields : { folderId : 3633, reasonCodes: [01,02] }}"

但在JsonConvert之后,crmData包含低于值的

crmData = {{
"ApplicationFields": {
"folderId": 3633,
"reasonCodes": [1,2]
}
}}

正如您所看到的,reasonCodes值已从01转换为1,从02转换为2。

如何避免转换。我也希望crmData中有相同的值。

不清楚您为什么关心那些前导零。正如评论中指出的那样,在使用数字时,它们毫无意义。因此,如果您确实需要它们,请将JSON更改为使用字符串:

reasonCodes: ["01", "02"]

或者,取消序列化为一个合适的C#类,并将类型定义为字符串:

public class Root
{
public Foo ApplicationFields { get; set; }  
}
public class Foo
{
public int FolderId { get; set; }
public string[] ReasonCodes { get; set; }
}

然后像这样取消序列化:

var result = JsonConvert.DeserializeObject<Root>(Json); 
Console.WriteLine(string.Join(", ", result.ApplicationFields.ReasonCodes));
//Output:
//  01, 02

对于JSON:中的数字,前导零无效

number = [ minus ] int [ frac ] [ exp ]
[...]
int = zero / ( digit1-9 *DIGIT )

数字的起始数字可以是零,也可以是非零。您可以通过使用自定义转换器来解决此问题。

相关内容

最新更新