簡體   English   中英

無法正確將C#類型代理到F#WebSharper應用程序中的客戶端代碼

[英]Unable to properly proxy a C# type to client code in an F# WebSharper application

在F#Web應用程序中使用某種C#類型時遇到問題。 我在F#應用程序中引用的庫中存在以下C#類型:

public static class OuterType
{
    public class Model
    {
        private readonly string id;
        private readonly bool selected;
        private string name;

        internal Model() : this(string.Empty) { }
        public Model(string id) : this(id, false) { }
        public Model(string id, bool selected)
        {
            this.id = name = id;
            this.selected = selected;
        }

        [Localizable(false)]
        public string ID => id;
        public bool Selected => selected;
        [Localizable(true)]
        public string Name
        {
            get => name;
            set => name = value;
        }
    }
}

我已經為其編寫了代理(作為F#Web應用程序的一部分):

[<Proxy(typeof<OuterType.Model>)>]
type ProxyModel =
    {
        ID : string
        Selected : bool
        Name : string
    }

我的項目編譯正常,但是我收到運行時序列化錯誤:

System.Exception:RPC JSON轉換期間發生錯誤---> System.Exception:無法在OuterType + Model類型的ID中查找具有以下字段的ID的轉換字段名稱:名稱,選定的ID

這使我相信轉換器希望通過字段名稱來匹配類型。 因此,我將代理更改如下:

[<Proxy(typeof<OuterType.Model>)>]
type ProxyModel =
    {
        id : string
        selected : bool
        name : string
    }

以上導致編譯錯誤:

WebSharper錯誤FS9001:找不到F#記錄類型的字段:OuterType.Model.Selected WebSharper錯誤FS9001:找不到F#記錄類型的字段:OuterType.Model.Name

我被困住了。 我有什么想念的嗎?

更新:

該應用程序的目標是netcoreapp2.1。 它使用以下WebSharper依賴關系(摘自我的paket.lock):

WebSharper (4.5.9.330)
WebSharper.AspNetCore (4.5.3.104)
WebSharper.FSharp (4.5.9.330)
WebSharper.Html (4.5.1.153)
WebSharper.Reactive (4.5.1.139)
WebSharper.UI (4.5.8.161)

WebSharper遠程處理使用反射來創建/讀取對象,因此,如果它們是類,則它們必須遵循https://developers.websharper.com/docs/v4.x/cs/remoting#heading-6中的規則。

在這種情況下,您唯一需要做的更改就是將無參數構造函數公開。

一旦有了它,就可以將C#類型用於RPC,但是仍然可以在客戶端使用,您需要在該類型上使用[JavaScript] (為C#項目添加了WebSharper和WebSharper.CSharp包),或者使用代理與之匹配的很好,包括您將無法使用F#記錄重現的構造函數,您可能需要一個類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM