我有OData model
的{{1}}
class X:
当我为此类发布新实体时,如果该字段是开放类型且为Utf8,则属性字段(开放类型<EntityType Name="X" OpenType="true">
<Key>
<PropertyRef Name="id" />
</Key>
<Property Name="name" Type="Edm.String" />
<Property Name="logo" Type="Edm.String" />
</EntityType>
)将使用这些UTF字符进行填充。如果我对非开放式字段(例如名称)执行相同操作,则数据正常。
例如:如果我发送使用(这是我在POST请求中发送的json)创建新IDictionary<string, object>
的请求
entity X
它将被序列化为(这是我在OData控制器中获得的实体)
{"name":"ä,ö,ü", "nameOpenType":"ä,ö,ü"}
问题是“ nameOpenType”变成了不可读的字符串,而不是与“ name”相同。
当我将POST请求发送到OData控制器时,序列化由OData默认完成。
我该如何解决?
答案 0 :(得分:1)
我可以重现该问题。控制器已正确接收UTF8。然后,在进行模型绑定时,odata反序列化器会出错。
为什么哦,为什么我们仍然遇到这类问题。有人发明了另一个内置标识符的字符串编码,例如UTF8文件的BOM。
要修复它并读取所需的字符串:
static string DecodeEncodedNonAsciiCharacters(string value) { return Regex.Replace( value, @"\\u(?<Value>[a-zA-Z0-9]{4})", m => { return ((char)int.Parse(m.Groups["Value"].Value, NumberStyles.HexNumber)).ToString(); }); }