C# DataContractJsonSerializer不工作
我使用DataContractJsonSerializer将JSON字符串转换为类,但始终返回空对象。 我在记事本中测试了带有“JSON查看器”扩展名的字符串是否有效。搜索了一个bug很长时间,并比较了其他示例 这是我的JSON字符串的缩写形式:C# DataContractJsonSerializer不工作,c#,json,serialization,datacontract,datacontractjsonserializer,C#,Json,Serialization,Datacontract,Datacontractjsonserializer,我使用DataContractJsonSerializer将JSON字符串转换为类,但始终返回空对象。 我在记事本中测试了带有“JSON查看器”扩展名的字符串是否有效。搜索了一个bug很长时间,并比较了其他示例 这是我的JSON字符串的缩写形式: { "error":[], "result": { "BCH": {"aclass":"currency","altname":"BCH","decimals":10,"display_decimals":5}, "DA
{
"error":[],
"result": {
"BCH": {"aclass":"currency","altname":"BCH","decimals":10,"display_decimals":5},
"DASH": {"aclass":"currency","altname":"test"}
}
}
类GetAssetInfoResponse和AssetInfo包含具有DataMember属性的属性,但属性结果(反序列化后)不包含任何对象
[DataContract]
[KnownType(typeof(AssetInfo))]
public class GetAssetInfoResponse
{
[DataMember(Name = "error")]
public List<string> Error { get; set; }
[DataMember(Name = "result")]
public List<Dictionary<string, AssetInfo>> Result { get; set; }
}
[DataContract]
public class AssetInfo
{
/// <summary>
/// Alternate name.
/// </summary>
[DataMember(Name = "altname")]
public string Altname { get; set; }
/// <summary>
/// Asset class.
/// </summary>
[DataMember(Name = "aclass")]
public string Aclass { get; set; }
/// <summary>
/// Scaling decimal places for record keeping.
/// </summary>
[DataMember(Name = "decimals")]
public int Decimals { get; set; }
/// <summary>
/// Scaling decimal places for output display.
/// </summary>
[DataMember(Name = "display_decimals")]
public int DisplayDecimals { get; set; }
}
我不能使用Newtonsoft.Json扩展,因为项目不应该包含任何外部依赖项。
是否有其他方法将JSON字符串传输到类中
感谢您的时间您将
结果
声明为列表
,但从格式上看,它看起来像一个字典,而不是一个字典列表(因为它以{
开头,它用于对象,或字典,而不是[
用于数组/列表)。若要将此格式用于词典,您需要配置UseSimpleDictionaryFormat
属性
var serializer = new DataContractJsonSerializer(typeof(GetAssetInfoResponse), new DataContractJsonSerializerSettings
{
UseSimpleDictionaryFormat = true
});
通过此设置和此更改,它起到了作用:
public Dictionary<string, AssetInfo> Result { get; set; }
公共字典结果{get;set;}
public Dictionary<string, AssetInfo> Result { get; set; }