C# JsonConvert.SerializeObject正在将属性值从字母(char)更改为数字(int)
JsonConvert.SerializeObject正在将属性值从字母更改为数字。我说'letters'和'number'是一个动态源对象,前后都是字符串,但源动态对象中的值'D'在序列化为JSON后显示为'1' SourceObjectC# JsonConvert.SerializeObject正在将属性值从字母(char)更改为数字(int),c#,serialization,json.net,C#,Serialization,Json.net,JsonConvert.SerializeObject正在将属性值从字母更改为数字。我说'letters'和'number'是一个动态源对象,前后都是字符串,但源动态对象中的值'D'在序列化为JSON后显示为'1' SourceObject public class Response { public dynamic DataBlocks { get; set; } } Response.DataBlocks.dynamic.dynamic.PropertyInQuestion==“D
public class Response
{
public dynamic DataBlocks { get; set; }
}
Response.DataBlocks.dynamic.dynamic.PropertyInQuestion==“D”
序列化代码
var serializedResponse = JsonConvert.SerializeObject(response);
结果为serializedResponse.dynamic.dynamic.PropertyInQuestion==“1”
结果因源属性中的字符而异,且其始终一致
- C->0
- D->1
- G->5
- M->4
- PC->2
- PD->3
- 下午->6点
public enum PropertyInQuestionType {
C,
D,
PC,
PD,
M,
G,
PM,
PG,
U,
KP,
}
您得到的响应很可能是将
PropertyInQuestion
设置为Enum
jsonvert.SerializeObject
将Enum
序列化为int
因为反序列化时属性是动态的,所以返回int 但是,您可以使用
Newtonsoft.Json.Converters.StringEnumConverter
并将其序列化为字符串。
这也意味着反序列化时将得到一个字符串(而不是枚举)
请发布相关代码,以便我们可以看到您正在使用的动态源对象with@Thinkingcap抱歉,添加了示例代码和更多detail@TomRiley这还不够。显示实际将属性设置为“D”的代码。请参阅:。@OfirWinegarten没有其他代码,它是一个来自服务的动态响应,我正在序列化为json。源动态的属性有一个“D”,生成的JSON在它的位置有一个“1”…因此,检查debug类型的
PropertyInQuestion
。这可能是一个很好的解释!没有看到它是一个动态类型删除了我的评论
var serializedResponse = JsonConvert.SerializeObject(response, new StringEnumConverter());